MySQL のサブパーティション化と同様に、PolarDB-X では、サブパーティション化構文を使用して、サブパーティションを含むパーティションテーブルを作成できます。サブパーティション化とは、指定されたパーティションキー列とパーティション化ポリシーに基づいて、パーティションテーブル内のパーティションをさらに分割することです。
サブパーティションを含むパーティションテーブルには、次の特性があります。
各パーティションは、サブパーティションのセットである論理パーティションになります。
各サブパーティションは、データノード上の特定の物理テーブルに対応する物理パーティションになります。
サポートされているバージョン
インスタンスバージョンは 5.4.17-16952556 以降である必要があります。
インスタンスのバージョン管理については、「リリースノート」をご参照ください。
PolarDB-X インスタンスのバージョンの表示方法については、「インスタンスのバージョンを表示および更新する」をご参照ください。
パーティションとサブパーティションの直交関係
PolarDB-X は、パーティションとサブパーティションの両方で、次の 7 つのパーティション化ポリシーをサポートしています。
そのため、PolarDB-X のパーティションとサブパーティションは完全に直交関係にあります。任意の 2 つのパーティション化ポリシーを組み合わせて、最大 49 の複合パーティション化ポリシーを構成できます。
テンプレート化されたサブパーティション化とテンプレート化されていないサブパーティション化
PolarDB-X は、テンプレート化されたサブパーティション化とテンプレート化されていないサブパーティション化をサポートしています。
PolarDB-X の 49 の複合パーティション化ポリシーはそれぞれ、テンプレート化されたサブパーティション化とテンプレート化されていないサブパーティション化をサポートしています。
テンプレート化されたサブパーティション化
テンプレート化されたサブパーティション化とは、テーブルのすべてのパーティションで、サブパーティションの数と境界値が同じであることを示します。例:
/*
* LIST COLUMNS パーティション化と KEY パーティション化に基づいて、テンプレート化されたサブパーティションを指定します。
* テーブルは、LIST COLUMNS パーティション化に基づいて 3 つのパーティションに分割されます。
* 各パーティションは、KEY パーティション化に基づいて 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)
);テンプレート化されていないサブパーティション化
テンプレート化されていないサブパーティション化とは、テーブルのすべてのパーティションで、サブパーティションの数と境界値が異なる場合があることを示します。例:
/*
* LIST COLUMNS パーティション化と KEY パーティション化に基づいて、テンプレート化されていないサブパーティションを指定します。
* テーブルは、LIST COLUMNS パーティション化に基づいて 3 つのパーティションに分割されます。
* 各パーティションは、KEY パーティション化に基づいてサブパーティションに分割されます。
* パーティション 1 は 2 つのサブパーティションに分割され、パーティション 2 は 3 つのサブパーティションに分割され、パーティション 3 は 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
);