当前位置: 首页>编程语言>正文

达梦 定义水平分区表

水平分区包括范围分区、哈希分区和列表分区三种。水平分区表的创建需要通过
<PARTITION 子句>指定。
    范围(RANGE)分区,按照分区列的数据范围,确定实际数据存放位置的划分方式。

    列表(LIST)分区,通过指定表中的某一个列的离散值集,来确定应当存储在一起的
数据。范围分区是按照某个列上的数据范围进行分区的,如果某个列上的数据无法通过划分
范围的方法进行分区,并且该列上的数据是相对固定的一些值,可以考虑使用 LIST 分区。
一般来说,对于数字型或者日期型的数据,适合采用范围分区的方法;而对于字符型数据,
取值比较固定的,则适合于采用 LIST 分区的方法。

    哈希(HASH)分区,对分区列值进行 HASH 运算后,确定实际数据存放位置的划分方
式,主要用来确保数据在预先确定数目的分区中平均分布,允许只建立一个 HASH 分区。在
很多情况下,用户无法预测某个列上的数据变化范围,因而无法实现创建固定数量的范围分
区或 LIST 分区。在这种情况下,DM 哈希分区提供了一种在指定数量的分区中均等地划分
数据的方法, 基于分区键的散列值(HASH 值)将行映射到分区中。当用户向表中写入数
据时,数据库服务器将根据一个哈希函数对数据进行计算,把数据均匀地分布在各个分区中。
在哈希分区中,用户无法预测数据将被写入哪个分区中。
    在很多情况下,经过一次分区并不能精确地对数据进行分类,这时需要多级分区表。在
进行多级分区的时候,三种分区类型还可以交叉使用。

例子:

CREATE TABLE "your_table_name" 
(
    "id" INT NOT NULL,
    "date_column" DATE NOT NULL,
    ... -- 其他字段定义
) 
PARTITION BY RANGE(DATE_COLUMN) -- 指定分区键为date_column
(
    PARTITION p0 VALUES LESS THAN ('2020-01-01'), -- 小于2020年1月1日的数据
    PARTITION p1 VALUES LESS THAN ('2021-01-01'), -- 2020年1月1日到2021年1月1日之间的数据
    PARTITION p2 VALUES LESS THAN ('2022-01-01'), -- 2021年1月1日到2022年1月1日之间的数据
    ... -- 可以根据需要定义更多的分区
    PARTITION pn VALUES LESS THAN (MAXVALUE) -- 大于或等于最后一个范围上限的数据
);

使用说明
1. <表名>指定所要建立的基表名;
2. <PARTITION 子句>用来指定水平分区。其中 RANGE 和 HASH 可以指定一个或多
  个列作为分区列,LIST 只能指定一个列作为分区列;
  1) “PARTITION BY RANGE……”子句用来指定范围分区,然后在每个分区中分
   区列的取值通过 VALUES 子句指定。
  2) “PARTITION BY LIST……”子句用来指定 LIST 分区,然后在每个分区中分
    区列的取值通过 VALUES 子句指定。当用户向表插入数据时,只要分区列的
    数据与 VALUES 子句指定的数据之一相等,该行数据便会写入相应的分区子
    表中。LIST 分区的分区范围值必须唯一,不能重复。
  3) “PARTITION BY HASH……”子句用来指定 HASH 分区。
3. 分区列类型必须是数值型、字符型或日期型,不支持 BLOB、CLOB、IMAGE、TEXT、
    LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、BFILE、时间间隔类
    型、虚拟列和用户自定义类型为分区列;
4. 水平分区表指定主键和唯一约束时,分区键必须都包含在主键和唯一约束中,但是
    全局唯一索引不受此约束;
5. 不能在水平分区表上建立自引用约束;
6. 普通环境中,水平分区表的各级分区数的总和上限是 65535;MPP 环境下,水平
    分区 表 的 各 级 分 区 总 数 上 限 取 决 于 INI 参数 MAX_EP_SITES ,上 限 为 2(16 -
    log2MAX_EP_SITES)。比如:当 MAX_EP_SITES 为默认值 64 时,分区总数上限为 1024;
7. 可以定义主表的 BRANCH 选项,但不能对水平分区子表进行 BRANCH 项设置,子
    表的 BRANCH 项只能通过主表继承得到;
8. 水平分区表不支持自增列;
9. 不允许引用水平分区子表作为外键约束;
10. 水平分区子表删除后,会将子表上的数据一起删除;
11. 范围分区和哈希分区的分区键可以多个,最多不超过 16 列;LIST 分区的分区键
    必须唯一;
12. 范围分区表使用说明:
    1) 范围分区支持 MAXVALUE 值的使用,MAXVALUE 代表一个比任何值都大的值。
    MAXVALUE 值需要用户指定才能使用,作为分区中的最大值。
    2) 范围分区的范围值表达式类型应与分区列类型一致,否则按分区列类型进行类
    型转换。
    3) 对于范围分区,增加分区必须在最后一个分区范围值的后面添加,要想在表的
    开始范围或中间增加分区,应使用 SPLIT PARTITION 语句。
13. LIST 分区表使用说明:
    1) LIST 分区支持 DEFAULT 关键字的使用,所有不满足分区条件的数据,都划
    分为 DEFAULT 的分区,但 DEFAULT 关键字需要用户指定,系统不会自动创
    建 DEFAULT 分区。
    2) LIST 水平分区表为堆表时,其各子表必须位于同一个表空间。
    3) LIST 分区范围值不能为 NULL。
    4) LIST 分区子表范围值个数与数据页大小和相关系统表列长度相关,存在以下
    限制:
        a) 4K 页,单个子表最多支持 120 个范围值。
        b) 8K 页,单个子表最多支持 254 个范围值。
        c) 16K 或 32K 页,单个子表最多支持 270 个范围值。
14. 组合水平分区表层次最多支持八层;
15. 普通表、堆表、列存储表均支持多级分区。

特别注意第八项:水平分区表不支持自增列;


https://www.xamrdz.com/lan/5j61948319.html

相关文章: