当单表过大时,查询速度会变慢,因为要扫码的数据块就会多。这样客户就会觉得系统性能有问题。对表进行分区后,逻辑上表还是一张完整的表,但是每次扫码的时候,能合理运用分区key,就能大大减少IO。
达梦数据库目前只支持水平分区表:表按照行拆分成多个分区,每个分区和主表有相同的列和约束条件。
目前水平分区主要支持4中类型
1.范围分区:对表某列上的值范围进行分区
2.哈希分区:按分区数进行散列分区,每个分区大小差不多。
3.列表分区:如果某列的值只有几个,基于这样的特点我们可以采用列表分区
4.多级分区:把上面三种分区进行任意组合,将表多次分区
1.范围分区表
1.创建范围分区时要指定默认分区,否则回因数据不能匹配分区后,而插入失败
2.创建时,可以指定不同表空间
CREATE TABLE t_range ( A INT, B VARCHAR, C DATETIME ) PARTITION BY RANGE(C) ( PARTITION P1 VALUES LESS THAN ('2021-09-01') TABLESPACE "TBS_PARTA", PARTITION P2 VALUES LESS THAN ('2021-10-01') TABLESPACE "TBS_PARTA", PARTITION P3 VALUES LESS THAN ('2021-11-01') TABLESPACE "TBS_PARTB", PARTITION P4 VALUES LESS THAN ('2021-12-01') TABLESPACE "TBS_PARTB", PARTITION P5 VALUES EQU OR LESS THAN(MAXVALUE) TABLESPACE "TBS_PARTB" ); |
查看分区表信息的SQL
select table_name, partitioning_type,partition_count from all_part_tables where table_name='T_RANGE' select table_name,partition_name,high_value from all_tab_partitions where table_name='T_RANGE'; |
2.列表分区表
列表分区按列上面的值进行分区,一般用于区号,城市,国别,分散较小的数值。
创建时候,也要有默认分区
CREATE TABLE LOCATION( A INT, B VARCHAR2(20), C char(10) ) PARTITION BY LIST(C) ( PARTITION P1 VALUES ('湖北','湖南') TABLESPACE "TBS_PARTA", PARTITION P2 VALUES ('山东','山西') TABLESPACE "TBS_PARTA", PARTITION P3 VALUES ('河南','河北') TABLESPACE "TBS_PARTA", PARTITION P4 VALUES ('北京','上海') TABLESPACE "TBS_PARTA", PARTITION P_DEFAULT VALUES(default) ); |
3.哈希分区表
如果表中的列值不满足范围分区和列表分区,那么就可以考虑使用哈希分区。数据库就会根据分区键的散列值将行映射到分区。是数据能均匀的分布在各个分区
CREATE TABLE MY_HASH( A INT, B VARCHAR2(20), C char(10) ) PARTITION BY HASH(C) ( PARTITION P1 TABLESPACE "TBS_PARTA", PARTITION P2 TABLESPACE "TBS_PARTA", PARTITION P3 TABLESPACE "TBS_PARTA", PARTITION P4 TABLESPACE "TBS_PARTA" ); |
4.多级分区表
如果数据表经过一次分区后,单个子分区还是很大,就可以考虑对子分区进行再分区。如果建一个LIST-RANG分区
CREATE TABLE M_LIST( A INT, B VARCHAR2(20), C VARCHAR2(40) ) PARTITION BY LIST(B) SUBPARTITION BY RANGE(A) SUBPARTITION TEMPLATE( SUBPARTITION SUB1 VALUES LESS THAN (10), SUBPARTITION SUB2 VALUES LESS THAN (20), SUBPARTITION SUB3 VALUES EQU OR LESS THAN (MAXVALUE) ) ( PARTITION P1 VALUES ('湖北','湖南'), PARTITION P2 VALUES ('北京','上海'), PARTITION P3 VALUES ('山东','山西') ); |
SUBPARTITION TEMPLATE 是子模板关键字,这样分区P1、P2、P3各自就有了子模板 SUB1、SUB2、SUB3
已经就是达梦分区表的基本概念。
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。
https://eco.dameng.com/