Skip to content

范围分区

若分区键字段的取值是连续的,则不适合使用列表分区,此种情况的最佳分区模式是范围分区,即按条件将键的取值划分成若干个范围,每个范围对应一个分区,在向表插入记录前,先测试记录满足哪个分区的条件,再将记录插入至相应的分区中。

说明:

范围分区为连续分区,分区段之间为“前闭后开”的划分模式,现系统暂不支持分区融合与分裂操作;若分区表设定了异常分区,则无法再增加分区。

语法格式

sql
range_partitioning_clause::=
    PARTITION BY RANGE (name_list) [INTERVAL expr {DAY|MONTH|YEAR}] PARTITIONS (range_parti_item[,range_parti_item]...) [opt_subpartitioning_clause]

range_parti_item::=
    (parti_values)
|   (MAXVALUES)
|   ColId VALUES LESS THAN (parti_values)
|   ColId VALUES LESS THAN (MAXVALUES)

参数说明

  • PARTITION BY RANGE:关键字,用于指定使用范围分区。
  • name_list:一个或多个列的列表,用于分区的列。
  • [INTERVAL expr {DAY|MONTH|YEAR}]:用于指定分区的时间间隔。
  • PARTITIONS (range_parti_item[,range_parti_item]...):分区定义
  • (parti_values):一个包含具体值的列表,用于定义分区。
  • (MAXVALUES):一个特殊的分区,用于捕获所有大于最后一个分区的最大值的值。
  • ColId VALUES LESS THAN (parti_values):指定列 ColId 的值小于 parti_values 的分区。
  • ColId VALUES LESS THAN (MAXVALUES):指定列 ColId 的值小于最大值的分区。
  • [opt_subpartitioning_clause]:可选子分区定义,用于进一步对分区进行子分区。

示例

创建一个以ID作为分区键的范围分区表,按照规则系统将ID小于1的数据划分在part1,将大于等于1小于1000的数据划分在part2,依次类推,最后大于等于2000的数据将划分在MAXVALUES异常分区内。

sql
CREATE TABLE test_part2(
    id INTEGER IDENTITY(1,2),
    name VARCHAR,
    city VARCHAR
)
PARTITION BY RANGE (id)
PARTITIONS (
    part1 VALUES LESS THAN (1),
    part2 VALUES LESS THAN (1000),
    part3 VALUES LESS THAN (1500),
    part4 VALUES LESS THAN (2000),
    part5 VALUES LESS THAN (MAXVALUES)
);