志当存高远,功到自然成!

少年强则中国强,少年进步则中国进步!

BlogJava 首页 新随笔 联系 聚合 管理
  53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks
为了使用户的大量的数据在读写操作和查询中速度更快,DM提供了对表和索引进行分区的技术,以改善超大规模应用的性能并方便数据管理。

  实现水平分区以后,可以达到以下目的:

  1. 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

  2. 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;

  3. 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;

  4. 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

  DM数据库提供对表的分区方法有两种:

  1、范围分区:范围分区就是对表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。

  2、HASH分区:HASH分区是通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区,使得这些分区大小一致。

  除了对表进行分区,还可以对索引进行分区。DM支持下面三种类型的分区索引:

  1、本地索引:其分区方式与其所在基础表的分区方式一模一样的索引。本地索引的每个分区仅对应于其所在基础表的一个分区。

  2、全局分区索引:使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。

  3、全局非分区索引:全局非分区索引基本上和非分区表的索引一样。索引结构是不分区的。

  1.1 水平分区表的创建

  在介绍水平分区表的创建之前。先要了解分区键的概念。

  分区键:分区键是分区表的某一列,它决定了分区表中每一行数据划分到哪个分区。该列的数据类型为DM常用数据类型,不支持BLOB、TEXT、ROWID、BIT、BINARY、VARBINARY、时间间隔等类型和用户自定义类型。分区键不可以删除或修改。

  范围分区通过LEFT或RIGHT关键字来指定每个值是第一个分区的上边界 (LEFT) 还是第二个分区的下边界 (RIGHT)。边界值不要求是递增的序列,但是不能重复,边界值不可以为NULL,支持使用常量表达式或返回常量值的函数来指定分区的边界值。

  如:建立范围分区表CREATE TABLE TAB1(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE (C1) LEFT FOR VALUES (1, 100, 10000);

  PARTITION NO1234

  VALUESVAL<=11

  建立HASH分区表CREATE TABLE TAB2(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY HASH(C1) PARTITIONS 3; TAB2以C1为分区键,且分区数为3。

  范围区间或HASH分区数目不能超过64个。不同的分区可以指定到不同的文件组。。

  1.2 分区索引的创建

  本地索引、全局非分区索引、全局分区索引可以建立在范围分区表或HASH分区表上,普通表上可以建立全局分区索引。

  如:CREATE TABLE T(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE(C1) LEFT FOR VALUES(1, 100);

  CREATE INDEX T_IND1 ON T (C2); -- 本地索引,系统将自动创建3个分区子索引,这些分区子索引按照C1进行分区。

  CREATE NOT PARTIAL INDEX T_IND2 ON T (C2); -- 全局非分区索引,索引不分区。

  CREATE INDEX T_IND3 ON T (C2) PARTITION BY RANGE(C2) LEFT FOR VALUES(5, 55); -- 全局分区索引,索引按照C2列分区

  1.3 水平分区表和分区索引的维护

  DM支持对范围分区表和范围分区表上的索引进行合并和拆分。HASH分区表和HASH分区表上的索引不支持合并和拆分,本地分区索引不允许合并和拆分。

  分区合并通过指定分区号将相邻的两个分区合并成一个分区。MERGE分区时,相邻的两个分区可以是相同的文件组,也可以是不同的文件组。

  分区拆分通过指定常量表达式值将某一个分区拆分成两个分区,指定的常量表达式值不能是原有的分区范围值。SPLIT分区时,可以指定新的文件组,或者不指定文件组。

  1.4 水平分区的使用

  水平分区表、分区索引的使用和普通表、普通索引的使用一样。用户通过SQL语句建立范围分区和HASH分区表,以及水平分区索引以后,普通的INSERT、DELETE、UPDATE、SELECT语句的使用不受任何影响。

  分区拆分或合并以后,普通的INSERT、DELETE、UPDATE、SELECT语句的使用不受任何影响。


只有注册用户登录后才能发表评论。


网站导航: