すべてのプロダクト
Search
ドキュメントセンター

PolarDB:パーティションの再編成

最終更新日:Jun 05, 2024

使用上の注意

  • レベル1のパーティションを再編成するには、Alibaba Cloud PolarDB for Xscale (PolarDB-X) インスタンスのバージョンが5.4.14-16539836以降である必要があります。

  • レベル2のパーティションを再編成するには、PolarDB-Xインスタンスのバージョンが5.4.17-16952556以降である必要があります。

  • HASH、KEY、またはCO_HASHのパーティション分割方法を使用してパーティション分割されたテーブルのパーティションを再編成することはできません。

  • パーティションを再編成する場合、新しいパーティションの境界値の範囲は、再編成された元のパーティションの境界値の範囲と一致している必要があります。

用語

  • テーブルグループ: 同一のパーティションキー列を共有する論理テーブルまたはグローバルインデックステーブルのコレクション。

  • グローバルインデックス: グローバルインデックス作成は、パーティションテーブルのインデックス作成手法です。 非パーティションキーを使用して、パーティションテーブルにグローバルインデックスを作成できます。 グローバルインデックスは、一意の制約を提供できます。

構文

ALTER alter_target_definition reorg_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

reorg_partition_operation_definition:
パーティションの再編成part_name_list (partition_specs_definition)
 | REORGANIZE SUBPARTITION subpart_name_list INTO (subpartition_specs_definition)
 | MODIFY PARTITION part_name REORGANIZE SUBPARTITION subpart_name_list INTO (subpartition_specs_definition)

part_name_list:
part_name[,part_name,...,]

subpart_name_list:
subpart_name[,subpart_name,...,]

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未満の値 (range_bound_value)

# RANGEまたはRANGE COLUMNSレベル2パーティションを指定します。
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レベル2パーティションを指定します。
list_subpartition_list:
(list_subpartition [, list_subpartition ...])

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

シナリオ1: レベル2パーティションを含まないレベル1パーティションの再編成

例1: 複数のRANGEレベル1パーティションの再編成

この例では、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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値は (2023) 未満、
 PARTITION p2の値は (2025) より少なく、
 PARTITION p3の値がより少ない (2027)
);

テーブル '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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値は (2023) 未満、
 PARTITION p2の値は (2025) より少なく、
 PARTITION p3の値がより少ない (2027)
); 

次のステートメントを実行して、r_t1テーブルの3つの連続したパーティションp1、p2、p3をp4パーティションとp5パーティションに再編成できます。 p4およびp5パーティションは、(PARTITION p4 VALUES LESS THAN (2024) 、PARTITION p5 VALUES LESS THAN (2027)) 句を使用することによって定義される。 次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE r_t1 /* テーブル名 * /
パーティションの再編成p1、p2、p3 INTO 
 	( 
 パートp4の値は (2024) 未満、 
 パートp5の値がより少ない (2027) 
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのr_t1テーブルとr_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。 この例では、テーブルグループ名はtg1です。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
パーティションの再編成p1、p2、p3 INTO 
 	( 
 パートp4の値は (2024) 未満、 
 パートp5の値がより少ない (2027) 
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE r_t1 /* テーブル名 * /
パーティションの再編成p1、p2、p3 INTO 
 	( 
 パートp4の値は (2024) 未満、 
 パートp5の値がより少ない (2027) 
 );

例2: 複数のLISTレベル1パーティションの再編成

この例では、l_t1およびl_t2テーブルは、LIST分割方法を使用して分割されます。 次のステートメントを実行して、テーブルを作成できます。

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
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー (YEAR('c'))
(
 PARTITION p0の値 (2020,2022、2024,2026、2028) 、
 パーティションp1値 (2021,2023、2025,2027、2029) 、
 PARTITION p2の値 (2030,2031、2032)
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー (YEAR('c'))
(
 PARTITION p0の値 (2020,2022、2024,2026、2028) 、
 パーティションp1値 (2021,2023、2025,2027、2029) 、
 PARTITION p2の値 (2030,2031、2032)
); 

次のステートメントを実行して、l_t1テーブルのp0およびp1レベル1パーティションをp3およびp4レベル1パーティションに再編成できます。 p3およびp4レベル1パーティションは、( PARTITION p3 VALUES IN (2020,2021、2022,2023、2024) 、PARTITION p4 VALUES IN (2025,2026、2027,2028、2029)) 句を使用することによって定義される。 次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE l_t1 /* テーブル名 * /
再編成パーティションp0、p1 INTO 
 (
PARTITION p3の値 (2020,2021、2022,2023、2024) 、
 		PARTITION p4の値 (2025,2026、2027,2028、2029)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのl_t1テーブルとl_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
再編成パーティションp0、p1 INTO 
 (
PARTITION p3の値 (2020,2021、2022,2023、2024) 、
 		PARTITION p4の値 (2025,2026、2027,2028、2029)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE l_t1 /* テーブル名 * /
パーティションの再編成p0、p1 INTO 
 (
PARTITION p3の値 (2020,2021、2022,2023、2024) 、
 		PARTITION p4の値 (2025,2026、2027,2028、2029)
 );

シナリオ2: レベル2パーティションを含むレベル1パーティションの再編成

例1: 複数のレベル1パーティションの再編成とレベル2パーティションの定義

説明

テンプレート化されていないレベル2パーティションを含むレベル1パーティションのみを再編成し、テンプレート化されていないレベル2パーティションを定義できます。

この例では、r_k_ntp_t1およびr_k_ntp_t2という名前のパーティションテーブルは、テンプレート化されていないレベル2パーティションを含みます。 次の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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
キーによるサブパート (a)
(
 パートp0は (2020) サブパート2よりも少ない値を示し、
 パートp1は (2021) サブパートよりも少ない値4、パートp2は (2022) サブパート2よりも少ない値であり、パーティーp3は (2023) のサブパーティー3よりも価値があります
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
キーによるサブパート (a)
(
 パートp0は (2020) サブパート2よりも少ない値を示し、
 パートp1は (2021) サブパートよりも少ない値4、パートp2は (2022) サブパート2よりも少ない値であり、パーティーp3は (2023) のサブパーティー3よりも価値があります
);

次のステートメントを実行して、r_k_ntp_t1テーブルのp1およびp2レベル1パーティションをp4レベル1パーティションに再編成できます。 p4レベル1パーティションは、partition p2 VALUES LESS THAN (2022) SUBPARTITIONS 4句を使用して定義されます。 次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE r_k_ntp_t1 /* テーブル名 * /
パーティションの再編成p1、p2 INTO 
 (
 	パートp4は (2022) サブパート1よりも少ない値を示します
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのr_k_ntp_t1テーブルとr_k_ntp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
パーティションの再編成p1、p2 INTO 
 (
 	パートp4は (2022) サブパート1よりも少ない値を示します
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE r_k_ntp_t1 /* テーブル名 * /
パーティションの再編成p1、p2 INTO 
 (
 	パートp4は (2022) サブパート1よりも少ない値を示します
 );

例2: レベル2パーティションを定義せずに複数のレベル1パーティションを再編成する

説明

この再編成方法は、テンプレート化または非テンプレート化レベル2パーティションを含む両方のテーブルに適用されます。

この例の操作は、「シナリオ1: レベル2パーティションを含まないレベル1パーティションの再編成」セクションの操作と同様です。 次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE r_k_ntp_t1 /* テーブル名 * /
パーティションの再編成p1、p2 INTO 
 	( 
 パートp4の値がより少ない (2022)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのr_k_ntp_t1テーブルとr_k_ntp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
パーティションの再編成p1、p2 INTO 
 	( 
 パートp4の値がより少ない (2022)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE r_k_ntp_t1 /* テーブル名 * /
パーティションの再編成p1、p2 INTO 
 	( 
 パートp4の値がより少ない (2022)
 );

シナリオ3: テンプレート化されたレベル2パーティションの再編成

説明

複数のテンプレート化されたレベル2パーティションを再編成すると、すべてのレベル1パーティションの下にある対応するレベル2パーティションが同時に再編成されます。

例1: 複数のRANGEレベル2パーティションの再編成

この例では、k_r_tp_t1およびk_r_tp_t2という名前のKEY − RANGE区分テーブルは、テンプレート化レベル2区分を含む。 次の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
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
範囲によるサブパート ('b')
(
 SUBPARTITION sp0値は (1000) 未満、
 SUBPARTITION sp1の値は (2000) 未満、
 下位分類sp2の値は (3000) より少なく、
 下位分類sp3の値がより少ない (4000)
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
範囲によるサブパート ('b')
(
 SUBPARTITION sp0値は (1000) 未満、
 SUBPARTITION sp1の値は (2000) 未満、
 下位分類sp2の値は (3000) より少なく、
 下位分類sp3の値がより少ない (4000)
); 

対応するステートメントを実行して、k_r_tp_t1テーブルのsp1およびsp2レベル2パーティションをsp4、sp5、およびsp6レベル1パーティションに再編成できます。 sp4、sp5、およびsp6のレベル1パーティションは、次の句を使用して定義されます。

(
 下位分類sp4の値は (2500) 未満、
 SUBPARTITION sp5の値がより少ない (2800) 、
 下位分類sp6の値がより少ない (3000)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE k_r_tp_t1 /* テーブル名 * /
分割sp1、sp2 INTOを再編成 
 	( 
 下位分類sp4の値は (2500) 未満、
 SUBPARTITION sp5の値がより少ない (2800) 、
 下位分類sp6の値がより少ない (3000)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのk_r_tp_t1テーブルとk_r_tp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
分割sp1、sp2 INTOを再編成 
 	( 
 下位分類sp4の値は (2500) 未満、
 SUBPARTITION sp5の値がより少ない (2800) 、
 下位分類sp6の値がより少ない (3000)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE k_r_tp_t1 /* テーブル名 * /
分割sp1、sp2 INTOを再編成 
 	( 
 下位分類sp4の値は (2500) 未満、
 SUBPARTITION sp5の値がより少ない (2800) 、
 下位分類sp6の値がより少ない (3000)
 );

例2: 複数のLISTレベル2パーティションの再編成

この例では、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
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
リストによるサブパート (YEAR('c'))
(
 SUBPARTITION sp0の値 (2020,2022、2024,2026、2028) 、
 下位分類sp1値 (2021,2023、2025,2027、2029) 、
 下位分類sp2値 (2030,2031、2032)
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
リストによるサブパート (YEAR('c'))
(
 SUBPARTITION sp0の値 (2020,2022、2024,2026、2028) 、
 下位分類sp1値 (2021,2023、2025,2027、2029) 、
 下位分類sp2値 (2030,2031、2032)
); 

対応するステートメントを実行して、k_l_tp_t1テーブルのsp0およびsp1テンプレートレベル2パーティションをsp3およびsp4レベル2パーティションに再編成できます。 sp3およびsp4レベル2パーティションは、次の句を使用して定義されます。

(
 下位分類sp3値 (2020,2021、2022,2023、2024) 、
 下位分類sp4値 (2025,2026、2027,2028、2029)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE k_l_tp_t1 /* テーブル名 * /
分割sp0、sp1 INTOを再編成 
 	( 
 		 下位分類sp3値 (2020,2021、2022,2023、2024) 、
 		下位分類sp4値 (2025,2026、2027,2028、2029)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのk_l_tp_t1テーブルとk_l_tp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
分割sp0、sp1 INTOを再編成 
 	( 
 		 下位分類sp3値 (2020,2021、2022,2023、2024) 、
 		下位分類sp4値 (2025,2026、2027,2028、2029)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE k_l_tp_t1 /* テーブル名 * /
分割sp0、sp1 INTOを再編成 
 	( 
 		 下位分類sp3値 (2020,2021、2022,2023、2024) 、
 		下位分類sp4値 (2025,2026、2027,2028、2029)
 );

シナリオ4: テンプレート化されていないレベル2パーティションの再編成

説明

テンプレート化されていないレベル2パーティションの場合、単一のレベル1パーティションの下でレベル2パーティションを個別に再編成できます。

例1: 指定したレベル1パーティションの下に複数のRANGEレベル2パーティションを再編成する

この例では、l_r_ntp_t1およびl_r_ntp_t2という名前のLIST − RANGE区分テーブルは、テンプレート化されていないレベル2区分を含む。 次のステートメントを実行して、テーブルを作成できます。

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
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー ('a')
範囲によるサブパート ('b')
(
 PARTITION p0の値 (2020,2022) (
 SUBPARTITION p0sp0値は (1000) 未満、
 サブパートp0sp1の値が (2000) よりも少ない、
 SUBPARTITION p0sp2の値は (3000) より少なく、
 下位分類p0sp3の値がより少ない (4000)
),
 パーティションp1の値 (2021,2023) (
 サブパートp1sp0値は (1500) よりも少なく、
 サブパートp1sp1の値が (2500) 未満、
 下位分類p1sp2値は (3500) よりも少なく、
 サブパートp1sp3値がより少ない (4500)
)
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー ('a')
範囲によるサブパート ('b')
(
 PARTITION p0の値 (2020,2022) (
 SUBPARTITION p0sp0値は (1000) 未満、
 サブパートp0sp1の値が (2000) よりも少ない、
 SUBPARTITION p0sp2の値は (3000) より少なく、
 下位分類p0sp3の値がより少ない (4000)
),
 パーティションp1の値 (2021,2023) (
 サブパートp1sp0値は (1500) よりも少なく、
 サブパートp1sp1の値が (2500) 未満、
 下位分類p1sp2値は (3500) よりも少なく、
 サブパートp1sp3値がより少ない (4500)
)
); 

対応するステートメントを実行して、l_r_ntp_t1テーブルのp0レベル1パーティション下のp0sp1およびp0sp2レベル2パーティションを、p0sp4、p0sp5、およびp0sp6レベル2パーティションに再編成できます。 p0sp4、p0sp5、およびp0sp6レベル2パーティションは、次の句を使用して定義されます。

(
 SUBPARTITION p0sp4値は (2500) 未満、
 サブパートp0sp5値が (2800) 未満、
 下位分類p0sp6の値がより少ない (3000)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE l_r_ntp_t1 /* テーブル名 * / 
 分割p0sp1、p0sp2を再編成する 
 	( 
 SUBPARTITION p0sp4値は (2500) 未満、
 サブパートp0sp5値が (2800) 未満、
 下位分類p0sp6の値がより少ない (3000)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのl_r_ntp_t1テーブルとl_r_ntp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * / 
 分割p0sp1、p0sp2を再編成する 
 	( 
 SUBPARTITION p0sp4値は (2500) 未満、
 サブパートp0sp5値が (2800) 未満、
 下位分類p0sp6の値がより少ない (3000)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY l_r_ntp_t1 /* テーブル名 * / 
 分割p0sp1、p0sp2を再編成する 
 	( 
 SUBPARTITION p0sp4値は (2500) 未満、
 サブパートp0sp5値が (2800) 未満、
 下位分類p0sp6の値がより少ない (3000)
 );

例2: 指定したレベル1パーティションの下にある複数のLISTレベル2パーティションの再編成

この例では、r_l_ntp_t1およびr_l_ntp_t2という名前のLIST − RANGE区分テーブルは、テンプレート化されていないレベル2区分を含む。 次のステートメントを実行して、テーブルを作成できます。

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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
リストによるサブパート ('b')
(
 PARTITION p0値が (2020) 未満 (
 サブパートp0sp0値 (2020,2022、2024,2026、2028) 、
 サブパートp0sp1値 (2021,2023、2025,2027、2029) 、
 サブパートp0sp2の値 (2030,2031)
 ),
 パートp1の値が (2022) 未満 (
 サブパートp1sp0値 (2020,2022、2024,2026、2028) 、
 サブパートp1sp1値 (2021,2023、2025,2027、2029) 、
 サブパートp1sp2の値 (2030)
 )
);

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
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
リストによるサブパート ('b')
(
 PARTITION p0値が (2020) 未満 (
 サブパートp0sp0値 (2020,2022、2024,2026、2028) 、
 サブパートp0sp1値 (2021,2023、2025,2027、2029) 、
 サブパートp0sp2の値 (2030,2031)
 ),
 パートp1の値が (2022) 未満 (
 サブパートp1sp0値 (2020,2022、2024,2026、2028) 、
 サブパートp1sp1値 (2021,2023、2025,2027、2029) 、
 サブパートp1sp2の値 (2030)
 )
);

対応するステートメントを実行して、r_l_ntp_t1テーブルのp0レベル1パーティション下のp0sp0およびp0sp1レベル2パーティションをp0sp4およびp0sp5レベル2パーティションに再編成できます。 p0sp4およびp0sp5レベル2パーティションは、次の句を使用して定義されます。

(
 サブパートp0sp4値 (2020,2021、2022,2023、2024) 、
 サブパートp0sp5値 (2025,2026、2027,2028、2029)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## テーブル名に基づいてテーブルのパーティションを再編成します。
ALTER TABLE r_l_ntp_t1 /* テーブル名 * / 
 再編成サブパーツp0sp0、p0sp1 INTO 
 (
 サブパートp0sp4値 (2020,2021、2022,2023、2024) 、
 サブパートp0sp5値 (2025,2026、2027,2028、2029)
 );

テーブルグループのパーティションの再編成

次のステートメントを実行して、tg1テーブルグループのr_l_ntp_t1テーブルとr_l_ntp_t2テーブルの両方のパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * / 
 分割p0sp0、p0sp1 INTOを再編成 
 (
 サブパートp0sp4値 (2020,2021、2022,2023、2024) 、
 サブパートp0sp5値 (2025,2026、2027,2028、2029)
 );

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを再編成します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが再編成されます。
ALTER TABLEGROUP BY TABLE r_l_ntp_t1 /* テーブル名 * / 
 分割p0sp0、p0sp1 INTOを再編成 
 (
 サブパートp0sp4値 (2020,2021、2022,2023、2024) 、
 サブパートp0sp5値 (2025,2026、2027,2028、2029)
 );

シナリオ5: グローバルインデックステーブルのパーティションの再編成

例1: 指定したグローバルインデックステーブルの複数のRANGEレベル1パーティションの再編成

この例では、r_gr_t1テーブルにg_rというグローバルインデックステーブルが含まれています。 次のSQL文を実行して、r_gr_t1テーブルを作成できます。

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,
グローバルインデックス 'g_r' ('a') カバー ('c')
レンジによるパーティー ('a')
(PARTITION 'p0' の値は (10000) よりも低く、PARTITION 'p1' 値は (20000) 未満、PARTITION 'p2' 値は (30000) 未満、
 PARTITION 'p3' の値は (40000) よりも少ない
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(PARTITION 'p0' の値は (2020) よりも低く、
 PARTITION 'p1' 値は (2021) 未満です。

対応するSQL文を実行して、r_gr_t1テーブルのg_rグローバルインデックステーブルのp0、p1、およびp2レベル1のパーティションをp4およびp5レベル1のパーティションに再編成できます。 p4およびp5レベル1パーティションは、次の句を使用して定義されます。

(
 PARTITION sp4の値は (15000) 未満、
 PARTITION sp5値がより少ない (30000)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## 'テーブル名'.'グローバルインデックス名' に基づいて、グローバルインデックステーブルのパーティションを再編成します。
ALTER TABLE 'r_gr_t1 '.'g_r'
 パーティションの再編成p0、p1、p2 INTO 
 (
 パートp4の値は (15000) 未満、
 パートp5の値がより少ない (30000)
 );

## 「グローバルインデックス名」on TALBE「テーブル名」に基づいて、グローバルインデックステーブルのパーティションを再編成します。
ALTER INDEX 'g_r'/* グローバルインデックス名 */ ON TABLE 'r_gr_t1 '/* テーブル名 * /
 パーティションの再編成p0、p1、p2 INTO 
 (
 パートp4の値は (15000) 未満、
 パートp5の値がより少ない (30000)
 );

テーブルグループのパーティションの再編成

次の文を実行してtg1テーブルグループのパーティションを再編成します。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。 この例では、グローバルインデックステーブルが属するテーブルグループの名前はtg1です。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * / 
 パーティションの再編成p0、p1、p2 INTO 
 (
 パートp4の値は (15000) 未満、
 パートp5の値がより少ない (30000)
 );

## 「グローバルインデックス名」に基づいて、同じテーブルグループ内のグローバルインデックステーブルのパーティションを再編成します。
ALTER TABLEGROUP BY INDEX 'g_r'/* グローバルインデックス名 */ ON TABLE 'r_gr_t1 '/* テーブル名 * /
 パーティションの再編成p0、p1、p2 INTO 
 (
 パートp4の値は (15000) 未満、
 パートp5の値がより少ない (30000)
 );

例2: 指定したグローバルインデックステーブルの複数のLISTレベル2パーティションの再編成

この例では、パーティションテーブルr_g_kl_t1には、g_klというグローバルインデックステーブルが含まれています。 KEY − LISTグローバルインデックステーブルg_klは、レベル2のパーティションを含む。 次のSQL文を実行して、r_g_kl_t1テーブルを作成できます。

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,
グローバルインデックス 'g_kl' ('a' 、'b') COVERING ('c')
キーによるパーティー ('b') パーティー2
 	リストによるサブパート ('a')
(
 サブパート「sp0」の値 (10000,10002、10004,10006、10008) 、サブパート 'sp1' 値 (20000,20001、20002,20003、20004) 、
 サブパート「sp2」の値 (30000,30001、30002)
 )
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(PARTITION 'p0' の値は (2020) よりも低く、
 PARTITION 'p1' 値は (2021) 未満です。

対応するSQL文を実行して、r_g_kl_t1テーブルのg_k_lグローバルインデックステーブルのsp1およびsp2レベル2パーティションをsp4およびsp5レベル2パーティションに再編成できます。 sp4およびsp5レベル2パーティションは、次の句を使用して定義されます。

(
サブパート「sp4」の値 (20000,20001、20002) 、
 サブパート「sp5」の値 (20003,20004、30000,30001、30002)
) 

次のセクションでは、パーティションの再編成に使用されるステートメントについて説明します。

テーブルのパーティションの再編成

## 'テーブル名'.'グローバルインデックス名' に基づいて、グローバルインデックステーブルのパーティションを再編成します。
ALTER TABLE 'r_g_kl_t1 '.'g_kl'
 分割sp1、sp2 INTOを再編成 
 (
 	サブパート「sp4」の値 (20000,20001、20002) 、
 サブパート「sp5」の値 (20003,20004、30000,30001、30002)
 );

## 「グローバルインデックス名」on TALBE「テーブル名」に基づいて、グローバルインデックステーブルのパーティションを再編成します。
ALTER INDEX g_kl/* グローバルインデックス名 */ ON TABLE 'r_g_kl_t1 ' /* テーブル名 * /
 分割sp1、sp2 INTOを再編成 
 (
 	サブパート「sp4」の値 (20000,20001、20002) 、
 サブパート「sp5」の値 (20003,20004、30000,30001、30002)
 );

テーブルグループのパーティションの再編成

同じテーブルグループ内のすべての論理テーブルのパーティションを再編成します。 この例では、次のステートメントを実行して、tg1テーブルグループ内のすべてのグローバルインデックステーブルのパーティションを再編成できます。

# テーブルグループ名に基づいてテーブルグループ内のパーティションを再編成します。 この例では、グローバルインデックステーブルが属するテーブルグループの名前はtg1です。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * / 
 分割sp1、sp2 INTOを再編成 
 (
 	サブパート「sp4」の値 (20000,20001、20002) 、
 サブパート「sp5」の値 (20003,20004、30000,30001、30002)
 );

## index「グローバルインデックス名」on TALBE「テーブル名」に基づいて、同じテーブルグループ内のすべてのグローバルインデックステーブルのパーティションを再編成します。
ALTER TABLEGROUP BY INDEX 'g_kl'/* グローバルインデックス名 */ ON TABLE 'r_g_kl_t1 '/* テーブル名 * /
 分割sp1、sp2 INTOを再編成 
 (
 	サブパート「sp4」の値 (20000,20001、20002) 、
 サブパート「sp5」の値 (20003,20004、30000,30001、30002)
 );