达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独 的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。
DM 提供了水平分区方式。水平分区包括范围、哈希和列表三种方式。
范围分区要求:分区列是数字或者日期类型。
DDL语句创建范围分区:
create table "TEST"."T1"
(
"ID" INT,
"NAME" VARCHAR(50),
)
PARTITION BY RANGE ("ID")
(
PARTITION "P1" VALUES LESS THAN (100) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DM1"),
PARTITION "P2" VALUES LESS THAN (200) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DM2"),
PARTITION "P3" VALUES LESS THAN (300) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DM3"),
PARTITION "P4" VALUES LESS THAN (MAXVALUE) STORAGE( initial 1, next 1, minextents 1, fillfactor 0, on "DM4")
)
storage(initial 1, next 1, minextents 1, fillfactor 0)
图形化操作如下:
列表分区要求:分区列是字符串类型,同时列内容类似字典,在一个大范围内进行选择(如城市,国家,地区等)。
DDL语句创建列表分区:
create table
test.t_sales(sales_id int, saleman varchar(20), saledate date,city
char(10))
Partition by list(city)
(partition P1 values('北京', '天津',' 哈尔滨','青岛'),
partition P2 values('上海','南京','杭州'),
partition P3 values('武汉','长沙','合肥'),
partition P4 values('广州','深圳','福建'));
图形化操作如下:
哈希分区要求:将分区列的值进行 hash 运算,然后将数据平均分配各个子分区, 存储数据非常快,取数据慢。
DDL语句创建列表分区:
CREATE TABLE TEST.T4
(ID INT,
NAME VARCHAR(20))
PARTITION BY HASH(ID)
( PARTITION "01",
PARTITION "02",
PARTITION "03",
PARTITION "04"
) ;
或者
create table test.t_hash(id int, name varchar(20))
partition by hash (id) partitions 10;
图形化操作如下:
在很多情况下,经过一次分区并不能精确地对数据进分类,这时需要多级分区表(范围-列表,列表-哈希,范围-哈希,范围-范围等),达梦数据库最多支持8级分区,只需要注意,每一层分区所用到的列不一样即可。
DDL语句如下:
create table "TEST"."SALE_SUM2"
(
"SALE_ID" INT,
"SALE_NAME" VARCHAR2(20),
"SALE_DATE" DATE,
"CITY" CHAR(10)
)
PARTITION BY LIST ("CITY")
SUBPARTITION BY RANGE ("SALE_DATE") ,
SUBPARTITION BY HASH ("SALE_ID")
PARTITION "P1" VALUES ('北京','天津','哈尔滨','青岛')
(
SUBPARTITION "P1_1" VALUES LESS THAN ('2012-04-01')
(
SUBPARTITION "P1_1_1",
SUBPARTITION "P1_1_2" ),
SUBPARTITION "P1_2" VALUES LESS THAN ('2013-04-01')
(
SUBPARTITION "P1_2_1",
SUBPARTITION "P1-2_2" ) ),
PARTITION "P2" VALUES ('上海','南京','杭州')
(
SUBPARTITION "P2_1" VALUES LESS THAN ('2012-04-01')
(
SUBPARTITION "P2_1_1",
SUBPARTITION "P2_1_2" ),
SUBPARTITION "P2_2" VALUES LESS THAN ('2013-04-01')
(
SUBPARTITION "P2_2_1",
SUBPARTITION "P2_2_2" ) ) )
storage(initial 1, next 1, minextents 1, fillfactor 0)
DM 采用子表方式创建分区表,分区表作为分区主表,而每一个分区以一个子表实体存
在,即每一个分区都是一个完整的表。
由于每一个分区都以一个子表作为实体,那么不同分区可以存储于相同表空间,也可以
位于不同的表空间中。将这些分区放在不同的表空间中具有以下的好处:
文章
阅读量
获赞