サブパーティショニング (複合パーティショニングとも呼ばれます) は、PolarDB-X テーブルの各パーティションをさらに小さなサブパーティションに分割する機能です。各パーティションは論理的な単位となり、各サブパーティションはデータノード上の物理テーブルにマッピングされます。
MySQL と同様に、PolarDB-X は、パーティション化されたテーブルの各パーティションをより小さなサブパーティションに分割する、サブパーティショニング (複合パーティショニングとも呼ばれます) をサポートしています。サブパーティションを持つパーティション化されたテーブルには、次の特徴があります。
各パーティションは論理パーティションであり、サブパーティションのセットで構成されます。
各サブパーティションは物理パーティションであり、データノード上の特定の物理テーブルに対応します。
サポートされるバージョン
インスタンスのバージョンは 5.4.17-16952556 以降である必要があります。
インスタンスのバージョニングについては、「リリースノート」をご参照ください。
PolarDB-X インスタンスのバージョンの表示方法については、インスタンスのバージョンを表示および更新するをご参照ください。
パーティションとサブパーティションの直交関係
PolarDB-X は、パーティションとサブパーティションの両方に対して 7 つのパーティショニングポリシーをサポートしています:
PolarDB-X のパーティションとサブパーティションは完全に直交しています。これらのポリシーのいずれか 2 つを自由に組み合わせることで、最大 49 の複合パーティショニングポリシーを構成できます。
テンプレート化されたサブパーティショニングと非テンプレート化されたサブパーティショニング
PolarDB-X は、サブパーティションを定義するための 2 つのモードをサポートしています。 PolarDB-X の 49 種類すべての複合パーティショニングポリシーが、両方のモードをサポートしています。
テンプレート化されたサブパーティショニング
テンプレートサブパーティション化では、すべてのパーティションが同じサブパーティション数と境界値を共有します。SUBPARTITION BY でサブパーティションレイアウトを一度定義すると、それがすべてのパーティションに自動的に適用されます。
次の例では、3 つの LIST COLUMNS パーティションを作成し、それぞれに 4 つの KEY サブパーティションを設定します。物理パーティションの合計は 3 × 4 = 12 です。
/*
* テンプレート化されたサブパーティショニング: LIST COLUMNS + KEY
* 3 つのパーティション × 4 つのサブパーティション = 12 の物理パーティション
*/
CREATE TABLE sp_tbl_list_key_tp(
id int,
country varchar(64),
city varchar(64),
order_time datetime not null,
PRIMARY KEY(id)
)
PARTITION BY LIST COLUMNS(country, city)
SUBPARTITION BY KEY(id) SUBPARTITIONS 4
(
PARTITION p1 VALUES IN (('China','Hangzhou')),
PARTITION p2 VALUES IN (('Russian','Moscow')),
PARTITION pd VALUES IN (DEFAULT)
);
SUBPARTITION BY の後に SUBPARTITIONS N を追加して、すべてのパーティションのサブパーティション数を均一に設定します。
非テンプレート化されたサブパーティショニング
非テンプレート化されたサブパーティショニングでは、各パーティションが独自のサブパーティション数と境界値を指定します。パーティションごとにサブパーティション数や境界値を変えたい場合は、このモードを使用します。
次の例では、3 つの LIST COLUMNS パーティションを作成し、それぞれ 2、3、4 つの KEY サブパーティションを設定します。物理パーティションの合計は 2 + 3 + 4 = 9 です。
/*
* 非テンプレート化されたサブパーティショニング: LIST COLUMNS + KEY
* p1: 2 つのサブパーティション、p2: 3 つのサブパーティション、pd: 4 つのサブパーティション = 9 の物理パーティション
*/
CREATE TABLE sp_tbl_list_key_ntp(
id int,
country varchar(64),
city varchar(64),
order_time datetime not null,
PRIMARY KEY(id)
)
PARTITION BY LIST COLUMNS(country, city)
SUBPARTITION BY KEY(id)
(
PARTITION p1 VALUES IN (('China','Hangzhou')) SUBPARTITIONS 2,
PARTITION p2 VALUES IN (('Russian','Moscow')) SUBPARTITIONS 3,
PARTITION pd VALUES IN (DEFAULT) SUBPARTITIONS 4
);
各 PARTITION 句に SUBPARTITIONS N を追加して、パーティションごとのサブパーティション数を設定します。