您可以在建立分區表的同時建立部分索引或在已建立好的分區表上建立部分索引。
建立分區表的同時建立部分索引
文法
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));