科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道DM6水平分区简介

DM6水平分区简介

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

2、全局分区索引:使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。可以看到,定义PUBLISH_DATE列为水平分区,LEFT指定每个值为每个分区的上边界,分区结果如下:  同样向表中插入1000万条记录,数据分布和非分区表一样。

来源: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章