注册
达梦数据库分区表介绍
培训园地/ 文章详情 /

达梦数据库分区表介绍

沐风 2023/05/19 1695 0 0

达梦数据库分区表介绍

达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独 的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。
DM 提供了水平分区方式。水平分区包括范围、哈希和列表三种方式。

  1. 范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范
    围,决定将该数据存储在哪个分区上;
  2. 哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通
    过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;
  3. 列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在
    一起的数据。例如,可以对表上的 status 列的值在('A','H','O')放在一个
    分区,值在('B','I','P')放在另一个分区,以此类推;
  4. 多级分区表:按上述三种分区方法进行任意组合,将表进行多次分区,称为多级分
    区表。

一、范围分区

范围分区要求:分区列是数字或者日期类型。
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)

图形化操作如下:
DCP1.png
DCP2.png
DCP3.png

二、列表分区

列表分区要求:分区列是字符串类型,同时列内容类似字典,在一个大范围内进行选择(如城市,国家,地区等)。
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('广州','深圳','福建'));

图形化操作如下:
DCP4.png
DCP5.png

三、哈希分区

哈希分区要求:将分区列的值进行 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;

图形化操作如下:
DCP6.png
DCP7.png

四、组合分区

在很多情况下,经过一次分区并不能精确地对数据进分类,这时需要多级分区表(范围-列表,列表-哈希,范围-哈希,范围-范围等),达梦数据库最多支持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 采用子表方式创建分区表,分区表作为分区主表,而每一个分区以一个子表实体存
在,即每一个分区都是一个完整的表。
由于每一个分区都以一个子表作为实体,那么不同分区可以存储于相同表空间,也可以
位于不同的表空间中。将这些分区放在不同的表空间中具有以下的好处:

  1. 减少所有数据都损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性;
  2. 恢复时间大大减少;
  3. 可以将同一个表中的数据分布在不同的磁盘上,从而均衡磁盘上的 I/O 操作;
  4. 提高了表的可管理性、可利用性和访问效率。
    分区操作对现存的应用和运行在分区表上的标准 DML 语句来说是透明的。但是,可以
    通过在 DML 中使用分区子表名字来对应用进行编程,使其充分利用分区的优点
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服