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

PolarDB:PolarDB-X のサブパーティショニング

最終更新日:Aug 13, 2026

サブパーティショニング (複合パーティショニングとも呼ばれます) は、PolarDB-X テーブルの各パーティションをさらに小さなサブパーティションに分割する機能です。各パーティションは論理的な単位となり、各サブパーティションはデータノード上の物理テーブルにマッピングされます。

MySQL と同様に、PolarDB-X は、パーティション化されたテーブルの各パーティションをより小さなサブパーティションに分割する、サブパーティショニング (複合パーティショニングとも呼ばれます) をサポートしています。サブパーティションを持つパーティション化されたテーブルには、次の特徴があります。

  • 各パーティションは論理パーティションであり、サブパーティションのセットで構成されます。

  • 各サブパーティションは物理パーティションであり、データノード上の特定の物理テーブルに対応します。

サポートされるバージョン

インスタンスのバージョンは 5.4.17-16952556 以降である必要があります。

説明

パーティションとサブパーティションの直交関係

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 を追加して、パーティションごとのサブパーティション数を設定します。