范围分区
若分区键字段的取值是连续的,则不适合使用列表分区,此种情况的最佳分区模式是范围分区,即按条件将键的取值划分成若干个范围,每个范围对应一个分区,在向表插入记录前,先测试记录满足哪个分区的条件,再将记录插入至相应的分区中。
说明:
范围分区为连续分区,分区段之间为“前闭后开”的划分模式,现系统暂不支持分区融合与分裂操作;若分区表设定了异常分区,则无法再增加分区。
语法格式
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)
);