更新时间:2024-09-06 GMT+08:00

RANGE-LIST

约束与限制

  • LIST分区类型要求分区定义中的value或value_list都是唯一的,不同分区定义里也需要不能重复引入。
  • 对于NULL的处理,只有value中包含了NULL值,才能插入或查询出NULL值,否则是不符合定义的,不允许插入。
  • 每个主分区下的子分区可以看成是一个新的一级的LIST分区表,因此所有的规则和约束都同一级的LIST是一样的, 不同主分区下的子分区定义可以不一样。

语法

创建一个或多个RANGE-LIST分区表,其中每个分区可能有一个或一个以上的子分区。

CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
   SUBPARTITION BY LIST {(expr) | COLUMNS(column_list)}
[(partition_definition [, partition_definition] ...)];

其中,partition_definition为:

PARTITION partition_name
       VALUES LESS THAN {(value | value_list) | MAXVALUE}
[(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition为:

SUBPARTITION subpartition_name
       VALUES IN {(value | value_list)}
表1 参数说明

参数名称

描述

expr

分区字段表达式。目前只支持INT类型,不支持字符类型。

column_list

RANGE COLUMNS的情况下使用。分区字段列表,不支持表达式,可以支持多列。

value

分区边界值。

value_list

RANGE COLUMNS的情况下使用,多个字段的边界值。

MAXVALUE

最大值。

partition_name

分区名称,同一个表中不可重复。

subpartition_name

子分区名称, 同一个表中不可重复。

使用示例

  • RANGE-LIST类型的使用示例
    CREATE TABLE tbl_range_list (col1 INT, col2 INT, col3 varchar(20))
    PARTITION BY RANGE(col1)
        SUBPARTITION BY LIST(col2)
    (
      PARTITION m1 VALUES LESS THAN(1000) (
        SUBPARTITION p0 VALUES in (1, 2),
    	SUBPARTITION p1 VALUES in (3, 4),
    	SUBPARTITION p2 VALUES in (5, 6)
      ),
      PARTITION m2 VALUES LESS THAN(2000) (
        SUBPARTITION p3 VALUES in (1, 2),
    	SUBPARTITION p4 VALUES in (3, 4),
    	SUBPARTITION p5 VALUES in (5, 6)
      ),
      PARTITION m3 VALUES LESS THAN(MAXVALUE) (
        SUBPARTITION p6 VALUES in (1, 2),
    	SUBPARTITION p7 VALUES in (3, 4),
    	SUBPARTITION p8 VALUES in (5, 6)
      )
    );
  • RANGE COLUMNS-LIST类型的使用示例
    CREATE TABLE tbl_range_columns_list
    (
        col1 INT,
        col2 INT,
        col3 varchar(20),
        col4 DATE
    )
    PARTITION BY RANGE COLUMNS(col4)
    	SUBPARTITION BY LIST(col1)
    (
      PARTITION dp1 VALUES LESS THAN('2023-01-01')(
        SUBPARTITION p0 VALUES in (1, 2),
        SUBPARTITION p1 VALUES in (3, 4),
        SUBPARTITION p2 VALUES in (5, 6)
      ),
      PARTITION dp2 VALUES LESS THAN('2024-01-01')(
        SUBPARTITION p3 VALUES in (1, 2),
        SUBPARTITION p4 VALUES in (3, 4),
        SUBPARTITION p5 VALUES in (5, 6)
      ),
      PARTITION dp3 VALUES LESS THAN('2025-01-01')(
        SUBPARTITION p6 VALUES in (1, 2),
        SUBPARTITION p7 VALUES in (3, 4),
        SUBPARTITION p8 VALUES in (5, 6)
      )
    );