当单表过大时,查询速度会变慢。对表进行分区后,逻辑上表还是一张完整的表,但是每次扫码的时候,能合理运用分区key,就能大大减少IO。
达梦数据库目前只支持水平分区表:表按照行拆分成多个分区,每个分区和主表有相同的列和约束条件。
目前水平分区主要支持4中类型
1.范围分区:对表某列上的值范围进行分区
2.哈希分区:按分区数进行散列分区,每个分区大小差不多。
3.列表分区:如果某列的值只有几个,基于这样的特点我们可以采用列表分区
1.范围分区表
1.创建范围分区时要指定默认分区,否则回因数据不能匹配分区后,而插入失败
2.创建时,可以指定不同表空间
CREATE TABLE t_range (
A INT,
B VARCHAR,
C DATETIME
)
PARTITION BY RANGE©
(
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©
(
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©
(
PARTITION P1 TABLESPACE “TBS_PARTA”,
PARTITION P2 TABLESPACE “TBS_PARTA”,
PARTITION P3 TABLESPACE “TBS_PARTA”,
PARTITION P4 TABLESPACE “TBS_PARTA”
);