扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源:IT168网站 2010年3月26日
关键字:
对于大型数据库管理系统而言,一个表中的数据量可能有上千万。这样大规模的数据表,就难以进行有效的管理,甚至进行查询、更新等操作的性能和速度都会受到不利的影响,那么此时你就可以尝试利用水平分区功能以提高性能。
达梦数据库DM6提供对表的分区方法有两种:
1、范围分区:范围分区就是对表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。
2、HASH分区:HASH分区是通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。
除了对表进行分区,还可以对索引进行分区。达梦数据库DM6支持下面三种类型的分区索引:
1、本地索引:其分区方式与其所在基础表的分区方式一模一样的索引。本地索引的每个分区仅对应于其所在基础表的一个分区。
2、全局分区索引:使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。
3、全局非分区索引:全局非分区索引基本上和非分区表的索引一样。索引结构是不分区的。
本次我们探讨的主要是对表的水平分区,这实际上是将一个表分为多个子表,这样,每个表包含的列数相同,但是行更少。例如,一个表可能包含最近三年的数据,但是只定期访问本年度的数据。在这种情况下,可考虑将数据分区成三个表,每个表只包含一年的数据。下面,按照这个思路实验一下使用水平分区的性能提升情况。
1、非分区表
先建数据表,表结构如下:
CREATETABLETABP(
ID INTIDENTITY(1,1),
AUTHOR VARCHAR(10),
PUBLISH_DATE DATE);
向表中插入1000万条数据,表中的数据按照PUBLISH_DATE列中的日期分为2007年、2008年、2009年三年的数据,数据分布情况如下:
查询全部2009年的数据,执行以下语句:
SELECT*FROMTABP WHEREPUBLISH_DATE BETWEEN'2008-1-1'AND'2008-12-31'
执行结果,耗时10秒。
2、分区表
在非分区表的基础上增加水平分区:
CREATETABLETABP(
ID INTIDENTITY(1,1),
AUTHOR VARCHAR(10),
PUBLISH_DATE DATE)
PARTITION BYRANGE(PUBLISH_DATE) LEFTFORVALUES('2007-12-31','2008-12-31');
可以看到,定义PUBLISH_DATE列为水平分区,LEFT指定每个值为每个分区的上边界,分区结果如下:
同样向表中插入1000万条记录,数据分布和非分区表一样。
同样查询2009年的数据。
SELECT*FROMTABP WHEREPUBLISH_DATE BETWEEN'2008-1-1'AND'2008-12-31'
执行结果,耗时3秒167毫秒。
通过上组实验可以看到,尽管没有用到索引等其它优化手段,只是利用了水平分区功能,查询效率就提供了近70%,效果非常明显。由此,水平分区功能为我们今后的优化工作又提供了一个有效的手段。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者