您可以在创建分区表的同时创建部分索引或在已创建好的分区表上创建部分索引。
创建分区表的同时创建部分索引
语法
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
[(create_definition,...)]
[table_options]
partition_options
...
其中,create_definition
为:
{
col_name column_definition
| {INDEX | KEY} [index_name] [index_type] (key_part,...)
[index_option] [partial_partition_option]
...
}
partial_partition_option
为:
([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
)
语法中的其他参数详情请参见CREATE TABLE。
参数说明
参数 | 说明 |
table_name | 表名。 |
col_name | 列名。 |
partition_name0 | 一级分区名称。 说明 您可以设置多个一级分区,多个分区名称之间使用英文逗号(,)分隔。 |
subpartition_name0 | 二级分区名称。 说明 您可以设置多个二级分区,多个分区名称之间使用英文逗号(,)分隔。 |
示例
在一级分区上创建部分索引。
创建分区表
orders
,在12月的orders_202212
分区上创建部分索引o_ind_dp(dept_no, part_no)
,而在其他历史分区上创建部分索引o_ind_amout(amount, order_id)
。CREATE TABLE orders ( order_id INT, dept_no INT, part_no INT, country varchar(20), date DATE, amount INT, Primary Key(order_id), KEY o_ind_dp(dept_no, part_no) (partition orders_202212), KEY o_ind_amout(amount, order_id) (partition orders_202201, partition orders_202202, partition orders_202203, partition orders_202204, partition orders_202205, partition orders_202206, partition orders_202207, partition orders_202208, partition orders_202209, partition orders_202210, partition orders_202211 ) ) PARTITION BY RANGE(month(date)) ( PARTITION orders_202201 VALUES LESS THAN(2), PARTITION orders_202202 VALUES LESS THAN(3), PARTITION orders_202203 VALUES LESS THAN(4), PARTITION orders_202204 VALUES LESS THAN(5), PARTITION orders_202205 VALUES LESS THAN(6), PARTITION orders_202206 VALUES LESS THAN(7), PARTITION orders_202207 VALUES LESS THAN(8), PARTITION orders_202208 VALUES LESS THAN(9), PARTITION orders_202209 VALUES LESS THAN(10), PARTITION orders_202210 VALUES LESS THAN(11), PARTITION orders_202211 VALUES LESS THAN(12), PARTITION orders_202212 VALUES LESS THAN(13) );
在二级分区上创建部分索引。
创建LIST-RANGE类型的二级分区表
tenants
,在p0
的所有二级分区以及p1
的p1_1
、p1_2
和p1_3
分区上创建部分索引ind_id
,在p0
的p0_1
和p0_2
分区以及p1
的p1_1
和p1_2
分区上创建部分索引ind_date
。CREATE TABLE tenants ( id INT, date DATE, count INT, KEY ind_id (id) ( partition p0, partition p1 (subpartition p1_1, subpartition p1_2, subpartition p1_3) ), KEY ind_date (date) ( partition p0 (subpartition p0_1, subpartition p0_2), partition p1 (subpartition p1_1, subpartition p1_2) ) ) PARTITION BY LIST COLUMNS(id) SUBPARTITION BY RANGE (month(date))( PARTITION p0 VALUES IN (1, 2, 3, 4, 5) ( SUBPARTITION p0_1 VALUES LESS THAN(4), SUBPARTITION p0_2 VALUES LESS THAN(7), SUBPARTITION p0_3 VALUES LESS THAN(10), SUBPARTITION p0_4 VALUES LESS THAN(13) ), PARTITION p1 VALUES IN (11, 12, 13, 14, 15) ( SUBPARTITION p1_1 VALUES LESS THAN(4), SUBPARTITION p1_2 VALUES LESS THAN(7), SUBPARTITION p1_3 VALUES LESS THAN(10), SUBPARTITION p1_4 VALUES LESS THAN(13) ) );
在已创建好的分区表上创建部分索引
语法
CREATE [UNIQUE] INDEX index_name
[index_type]
ON table_name (key_part,...)
[index_option]
[algorithm_option | lock_option |partial_partition_option] ...
其中,partial_partition_option
为:
([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
)
语法中的其他参数详情请参见CREATE INDEX。
参数说明
参数 | 说明 |
index_name | 索引名称。 |
table_name | 表名。 |
partition_name0 | 一级分区名称。 说明 您可以设置多个一级分区,多个分区名称之间使用英文逗号(,)分隔。 |
subpartition_name0 | 二级分区名称。 说明 您可以设置多个二级分区,多个分区名称之间使用英文逗号(,)分隔。 |
示例
在一级分区上创建部分索引。
在分区表
orders
的orders_202201
分区上创建部分索引o_part_id
。CREATE INDEX o_part_id ON orders(part_no, order_id) (partition orders_202201);
您也可以使用
ALTER TABLE ADD KEY
命令来创建以上示例中的部分索引。ALTER TABLE orders ADD KEY o_part_id(part_no, order_id) (partition orders_202201);
在二级分区上创建部分索引。
在分区表
tenants
的p0
分区的所有二级分区以及p1
分区的二级分区p1_1
上创建部分索引ind_count
。CREATE INDEX ind_count ON tenants(count) (partition p0, partition p1 (subpartition p1_1));
您也可以使用
ALTER TABLE ADD KEY
命令来创建以上示例中的部分索引。ALTER TABLE tenants ADD KEY ind_count(count) (partition p0, partition p1 (subpartition p1_1));