增加分区

注意事项

  • 本文要求PolarDB-X实例版本必须为5.4.14-16539836及以上;

  • 若要增加二级分区,要求PolarDB-X实例版本必须为5.4.17-16952556及以上。

  • 哈希类型的分区策略,例如HASH/KEY/CO_HASH,不支持执行该操作。

  • Range/Range Columns的分区策略,若分区定义使用了maxvalue等“catch-all”分区,不支持执行该分区操作。

  • List/List Columns的分区策略,若分区定义使用了default等“catch-all”分区,不支持执行该分区操作。

名词解释

  • 表组:分区列完全相同的一组逻辑表或全局索引表的集合。

  • 全局索引:使用另一个维度进行水平分区的数据与主表始终保持强一致的分区表。

语法

ALTER alter_target_definition add_partition_operation_definition

alter_target_definition:
		TABLE [db_name.]tbl_name
 | TABLE tbl_name.index_name
 | TABLEGROUP tg_name
 | INDEX index_name ON TABLE [db_name.]tbl_name
 | TABLEGROUP BY TABLE [db_name.]tbl_name
 | TABLEGROUP BY INDEX index_name ON TABLE [db_name.]tbl_name

add_partition_operation_definition:
		ADD PARTITION (partition_specs_definition)
 | ADD SUBPARTITION (subpartition_specs_definition)
 | MODIFY PARTITION part_name ADD SUBPARTITION (subpartition_specs_definition)

partition_specs_definition:
 range_partition_list
 | list_partition_list

subpartition_specs_definition:
 range_subpartition_list
 | list_subpartition_list

range_partition_list:
 ( range_partition [, range_partition, ... ] )

range_partition:
 	PARTITION partition_name VALUES LESS THAN (range_bound_value) 

# 二级分区的Range/Range Columns分区定义
range_subpartition_list:
	( range_subpartition [, range_subpartition, ... ] )

range_subpartition:
 SUBPARTITION subpartition_name VALUES LESS THAN (range_bound_value) [partition_spec_options]

list_partition_list:
 (list_partition [, list_partition ...])

list_partition:
 	PARTITION partition_name VALUES IN (list_bound_value) [partition_spec_options] 

# 二级分区的List/List Columns分区定义
list_subpartition_list:
	(list_subpartition [, list_subpartition ...])

list_subpartition:
	SUBPARTITION subpartition_name VALUES IN (list_bound_value) [partition_spec_options]

场景1:目标分区是不含二级分区的一级分区

示例1:增加一个RANGE一级分区

假设r_t1与r_t2都采用Range分区,建表SQL如下所示:

CREATE TABLE `r_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`)) 
(
 PARTITION p0 VALUES LESS THAN (2020),
 PARTITION p1 VALUES LESS THAN (2021)
);

CREATE TABLE `r_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`)) 
(
 PARTITION p0 VALUES LESS THAN (2020),
 PARTITION p1 VALUES LESS THAN (2021)
);

现在给r_t1表增加一个新的Range分区,新的Range的分区定义是PARTITION p2 VALUES LESS THAN (2022),具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE r_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE r_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

示例2:增加一个LIST一级分区

假如l_t1与l_t2都采用List分区,建表SQL如下所示:

CREATE TABLE `l_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY LIST(YEAR(`c`)) 
(
 PARTITION p0 VALUES IN (2020,2022),
 PARTITION p1 VALUES IN (2021,2023)
);

CREATE TABLE `l_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY LIST(YEAR(`c`)) 
(
 PARTITION p0 VALUES IN (2020,2022),
 PARTITION p1 VALUES IN (2021,2023)
);

给l_t1表增加一个新的List分区,新的List的分区定义是PARTITION p2 VALUES IN (2024),具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE l_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES IN (2024) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES IN (2024) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE l_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES IN (2024) );

场景2:目标分区是含有二级分区的一级分区

示例1:增加一个一级分区,但同时指定二级分区定义

说明

该种用法仅适用于非模板化的二级分区。

假设r_k_ntp_t1与r_k_ntp_t2都采用Range+Key的非模板化二级分区,建表SQL如下所示:

CREATE TABLE `r_k_ntp_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`)) 
SUBPARTITION BY KEY(a) 
(
 PARTITION p0 VALUES LESS THAN (2020) SUBPARTITIONS 2,
 PARTITION p1 VALUES LESS THAN (2021) SUBPARTITIONS 4
);

CREATE TABLE `r_k_ntp_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`)) 
SUBPARTITION BY KEY(a)
(
 PARTITION p0 VALUES LESS THAN (2020) SUBPARTITIONS 2,
 PARTITION p1 VALUES LESS THAN (2021) SUBPARTITIONS 4
);

现在给r_k_ntp_t1表增加一个新的Range分区,新的Range的分区定义是PARTITION p2 VALUES LESS THAN (2022),同时指定这个新的一级分区的二级分区的分区数目是3,具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE r_k_ntp_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2024) SUBPARTITIONS 3 ) ;

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2024) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE r_k_ntp_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2024) );

示例2:增加一个一级分区,但不指定二级分区定义

说明

该种用法同时适用于模板化二级分区与模板化二级分区。

该种用法与场景1(目标分区是不含二级分区的一级分区)的用法类似。具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE r_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE r_k_t1 /*表名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

场景3:目标分区是模板化的二级分区

说明

对于模板化二级分区,所有一级分区下的二级分区会同时进行变更。

示例1:增加一个RANGE二级分区

假如k_r_tp_t1与k_r_tp_t2都采用Key+Range的模板化分区,建表SQL如下所示:

CREATE TABLE `k_r_tp_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`) PARTITIONS 2
SUBPARTITION BY RANGE(YEAR(`c`))
(
 SUBPARTITION sp0 VALUES LESS THAN (2020),
 SUBPARTITION sp1 VALUES LESS THAN (2021)
);

CREATE TABLE `k_r_tp_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`) PARTITIONS 2
SUBPARTITION BY RANGE(YEAR(`c`))
(
 SUBPARTITION sp0 VALUES LESS THAN (2020),
 SUBPARTITION sp1 VALUES LESS THAN (2021)
);

给k_r_tp_t1表增加一个新的Range二级分区,新的Range二级分区定义是SUBPARTITION sp2 VALUES LESS THAN (2022),具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE k_r_tp_t1 /*表名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES LESS THAN (2022) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES LESS THAN (2022) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE k_r_tp_t1 /*表名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES LESS THAN (2022) );

示例2:增加一个LIST二级分区

假如k_l_tp_t1与k_l_tp_t2都采用List分区,建表SQL如下所示:

CREATE TABLE `k_l_tp_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`) PARTITIONS 2
SUBPARTITION BY LIST(YEAR(`c`)) 
(
 SUBPARTITION sp0 VALUES IN (2020,2022),
 SUBPARTITION sp1 VALUES IN (2021,2023)
);

CREATE TABLE `k_l_tp_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY(`a`) PARTITIONS 2
SUBPARTITION BY LIST(YEAR(`c`)) 
(
 SUBPARTITION sp0 VALUES IN (2020,2022),
 SUBPARTITION sp1 VALUES IN (2021,2023)
);

给k_l_tp_t1表增加一个新的List二级分区,新的List二级分区定义是SUBPARTITION p2 VALUES IN (2024)。具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE k_l_tp_t1 /*表名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES IN (2024) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES IN (2024) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE k_l_tp_t1 /*表名*/ 
	ADD SUBPARTITION ( SUBPARTITION p2 VALUES IN (2024) );

场景4:目标分区是非模板化的二级分区

说明

对于非模板化二级分区,允许单独对某个一级分区下的二级分区会进行分区变更。

示例1:指定一级分区并增加一个RANGE二级分区

假如l_r_ntp_t1与l_r_ntp_t2都采用List+Range的非模板化分区,建表SQL如下所示:

CREATE TABLE `l_r_ntp_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY LIST(`a`)
SUBPARTITION BY RANGE(YEAR(`c`))
(
 PARTITION p0 VALUES IN (2020,2022) (
 	SUBPARTITION p0sp0 VALUES LESS THAN (2020),
 	SUBPARTITION p0sp1 VALUES LESS THAN (2022)
	),
 PARTITION p1 VALUES IN (2021,2023) (
 	SUBPARTITION p1sp0 VALUES LESS THAN (2021),
 SUBPARTITION p1sp1 VALUES LESS THAN (2023),
 SUBPARTITION p1sp2 VALUES LESS THAN (2025)
	)
);

CREATE TABLE `l_r_ntp_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY LIST(`a`)
SUBPARTITION BY RANGE(YEAR(`c`))
(
 PARTITION p0 VALUES IN (2020,2022) (
 	SUBPARTITION p0sp0 VALUES LESS THAN (2020),
 	SUBPARTITION p0sp1 VALUES LESS THAN (2022)
	),
 PARTITION p1 VALUES IN (2021,2023) (
 	SUBPARTITION p1sp0 VALUES LESS THAN (2021),
 SUBPARTITION p1sp1 VALUES LESS THAN (2023),
 SUBPARTITION p1sp2 VALUES LESS THAN (2025)
	)
);

给l_r_ntp_t1表的一级分区p0单独增加一个新的Range二级分区,新的Range二级分区定义是SUBPARTITION p0sp2 VALUES LESS THAN (2024)。具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE l_r_ntp_t1 /*表名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION ( SUBPARTITION p0sp2 VALUES LESS THAN (2024) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION ( SUBPARTITION p0sp2 VALUES LESS THAN (2024) );

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY l_r_ntp_t1 /*表名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION ( SUBPARTITION p0sp2 VALUES LESS THAN (2024) );

示例2:指定一级分区并增加一个LIST二级分区

假如r_l_ntp_t1与r_l_ntp_t2都采用List+Range非模板化二级分区,建表SQL如下所示:

CREATE TABLE `r_l_ntp_t1` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`))
SUBPARTITION BY LIST(`a`) 
(
 PARTITION p0 VALUES LESS THAN (2020) (
 	SUBPARTITION p0sp0 VALUES IN (2017),
 SUBPARTITION p0sp1 VALUES IN (2018)
 ),
 PARTITION p1 VALUES LESS THAN (2022) (
 	SUBPARTITION p1sp0 VALUES IN (2020),
 SUBPARTITION p1sp1 VALUES IN (2021)
 )
);

CREATE TABLE `r_l_ntp_t2` (
`a` bigint(20) UNSIGNED NOT NULL,
`b` bigint(20) UNSIGNED NOT NULL,
`c` datetime NOT NULL,
`d` varchar(16) NOT NULL,
`e` varchar(16) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`))
SUBPARTITION BY LIST(`a`) 
(
 PARTITION p0 VALUES LESS THAN (2020) (
 	SUBPARTITION p0sp0 VALUES IN (2017),
 SUBPARTITION p0sp1 VALUES IN (2018)
 ),
 PARTITION p1 VALUES LESS THAN (2022) (
 	SUBPARTITION p1sp0 VALUES IN (2020),
 SUBPARTITION p1sp1 VALUES IN (2021)
 )
);

给r_l_ntp_t1表的一级分区p0单独增加一个新的Range二级分区,新的Range二级分区定义是SUBPARTITION p0sp2 VALUES IN (2019)。具体用法如下所示。

表级用法

## 基于表名字进行表级的分区变更操作
ALTER TABLE r_l_ntp_t1 /*表名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION (SUBPARTITION p0sp2 VALUES IN (2020));

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作
ALTER TABLEGROUP tg1 /*表组名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION (SUBPARTITION p0sp2 VALUES IN (2020));

## 基于表名进行表组级的分区变更操作(即基于表名自动找查对应的表组并进行操作)
ALTER TABLEGROUP BY TABLE r_l_ntp_t1 /*表名*/ 
	MODIFY PARTITION p0
	ADD SUBPARTITION (SUBPARTITION p0sp2 VALUES IN (2020));

场景5:目标分区是全局索引表的分区

示例1:指定全局索引并增加一个RANGE一级分区

假设r_gr_t1是一个使用全局索引的表,建表SQL如下所示:

CREATE TABLE `r_gr_t1` (
	`a` bigint(20) UNSIGNED NOT NULL,
	`b` bigint(20) UNSIGNED NOT NULL,
	`c` datetime NOT NULL,
	`d` varchar(16) NOT NULL,
	`e` varchar(16) NOT NULL,
	GLOBAL INDEX `g_r` (`a`) COVERING (`c`)
		PARTITION BY RANGE(`a`)
		(PARTITION `p0` VALUES LESS THAN (10000),
		 PARTITION `p1` VALUES LESS THAN (20000)),
	KEY `auto_shard_key_c` USING BTREE (`c`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`))
(PARTITION `p0` VALUES LESS THAN (2020),
 PARTITION `p1` VALUES LESS THAN (2021));

给r_gr_t1表的全局索引g_r增加一个新的Range分区,新的Range的分区定义是PARTITION p2 VALUES LESS THAN (30000)。具体用法如下所示。

表级用法

## 基于 `表名`.`全局索引名` 进行全局索引表的分区变更操作
ALTER TABLE `r_gr_t1`.`g_r`
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (30000) );

## 基于 `全局索引` ON TALBE `表名` 进行全局索引表的分区变更操作
ALTER INDEX g_r/*全局索引名*/ ON TABLE `r_gr_t1` /*表名*/
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (30000) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即上述两个表同时执行分区变更。

## 基于表组名字进行表组级的分区变更操作,假如全局索引表的表组名是tg1
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

## 基于 `全局索引` ON TALBE `表名` 进行全局索引表的表组的分区变更操作
ALTER TABLEGROUP BY INDEX `g_r`/*全局索引名*/ ON TABLE `r_gr_t1` /*表名*/
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (30000) );

示例2:指定全局索引并增加一个LIST二级分区

假如r_g_kl_t1是一个使用全局索引的分区表,其中全局索引使用Key+List的二级分区,建表SQL如下所示:

CREATE TABLE `r_g_kl_t1` (
	`a` bigint(20) UNSIGNED NOT NULL,
	`b` bigint(20) UNSIGNED NOT NULL,
	`c` datetime NOT NULL,
	`d` varchar(16) NOT NULL,
	`e` varchar(16) NOT NULL,
	GLOBAL INDEX `g_kl` (`a`,`b`) COVERING (`c`)
		PARTITION BY KEY(`b`) PARTITIONS 2
 	SUBPARTITION BY LIST(`a`)
		(SUBPARTITION `sp0` VALUES IN (10000),
		 SUBPARTITION `sp1` VALUES IN (20000))
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE(YEAR(`c`))
(PARTITION `p0` VALUES LESS THAN (2020),
 PARTITION `p1` VALUES LESS THAN (2021));

给r_g_kl_t1表的全局索引g_kl增加一个新的LIST二级分区,新增的List的二级分区定义是SUBPARTITION sp2 VALUES IN (30000)。具体用法如下所示。

表级用法

## 基于 `表名`.`全局索引名` 进行全局索引表的分区变更操作
ALTER TABLE `r_g_kl_t1`.`g_kl`
	ADD SUBPARTITION ( SUBPARTITION sp2 VALUES IN (30000) );

## 基于 `全局索引` ON TALBE `表名` 进行全局索引表的分区变更操作
ALTER INDEX g_kl/*全局索引名*/ ON TABLE `r_g_kl_t1` /*表名*/
	ADD SUBPARTITION ( SUBPARTITION sp2 VALUES IN (30000) );

表组级用法

同一个表组的所有逻辑表同时进行增加分区的操作,即修改全局索引所对应的表组的分区定义。

## 基于表组名字进行表组级的分区变更操作,假如全局索引表的表组名是tg1
ALTER TABLEGROUP tg1 /*表组名*/ 
	ADD PARTITION ( PARTITION p2 VALUES LESS THAN (2022) );

## 基于 INDEX `全局索引` ON TALBE `表名` 进行全局索引表的表组的分区变更操作
ALTER TABLEGROUP BY INDEX `g_kl`/*全局索引名*/ ON TABLE `r_g_kl_t1` /*表名*/
		ADD SUBPARTITION ( SUBPARTITION sp2 VALUES IN (30000) );