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

PolarDB:PolarDB-X のパーティションタイプ

最終更新日:Aug 13, 2026

PolarDB-X は、パーティション全体でのデータ分散を制御するため、HASH、KEY、RANGE、LIST、および CO_HASH のパーティションタイプをサポートしています。

パーティションタイプ

PolarDB-X は、以下のパーティションタイプをサポートしています:

  • HASH パーティショニング

    • HASH (MySQL 互換構文)

    • KEY (MySQL 互換構文)

  • RANGE パーティショニング

    • RANGE (MySQL 互換構文)

    • RANGE COLUMNS (MySQL 互換構文)

  • LIST パーティショニング

    • LIST (MySQL 互換構文)

    • LIST COLUMNS (MySQL 互換構文)

  • シナリオ固有のパーティショニング

    CO_HASH (PolarDB-X 固有の構文)

HASH パーティショニング

HASH パーティショニングでは、コンシステントハッシュアルゴリズムを使用してパーティションキー列またはパーティショニング関数式からハッシュ値を計算し、データをルーティングします。これには、[KEY パーティショニング] (列ベース) と [HASH パーティショニング] (関数ベース) が含まれます。

KEY パーティショニングと HASH パーティショニングの比較

パーティションタイプ

サポートされるパーティションキー

パーティショニング関数のサポート

ステートメント構文

制限事項

ルーティングポリシー (ポイントクエリ)

KEY パーティショニング (デフォルト)

単一列のパーティションキー

いいえ

PARTITION BY KEY(c1)

  • ホットパーティション分割はサポートされていません。

  • データは 1 つのパーティションキー列に基づいてパーティションにルーティングされます。

  1. コンシステントハッシュアルゴリズムを使用して、c1 列の値に基づいてハッシュ値 c1_hash が計算されます。

  2. データは c1_hash の値に基づいて異なるパーティションにルーティングされます。

ベクトルパーティションキー

いいえ

PARTITION BY KEY(c1,c2,...,cn)

  • ホットパーティション分割がサポートされています。

  • デフォルトでは、データは c1 列のみに基づいてルーティングされます。他の列により、ホットパーティション分割が可能になります。

  • n は、同時に使用されるパーティションキー列の数です。

  • 最大 5 つのパーティションキー列がサポートされています。

  1. パーティションキー列 (c1,c2,...,cn) の値がベクトルパーティションキーとして使用され、コンシステントハッシュアルゴリズムによって各列のハッシュが計算されることで、ベクトルパーティションキーに対応するハッシュのベクトル (c1_hash,c2_hash,...,cn_hash) が得られます。

  2. ハッシュのベクトル (c1_hash,c2_hash,...,cn_hash) は、範囲によってデータをパーティションにルーティングするために使用されます。

HASH パーティショニング

単一列のパーティションキー

いいえ

PARTITION BY HASH(c1)

  • ホットパーティション分割はサポートされていません。

  • データは 1 つのパーティションキー列に基づいてパーティションにルーティングされます。

  • 以下のパーティショニング関数のみがサポートされています:

    • YEAR

    • MONTH

    • DAYOFMONTH

    • DAYOFWEEK

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

PARTITION BY HASH(c1) のルーティングポリシーは、PARTITION BY KEY(c1) のルーティングポリシーと同じです。

はい

PARTITION BY HASH(YEAR(c1))

  1. YEAR 関数は、c1 列の値に基づいて年の値を計算するために使用されます。

  2. コンシステントハッシュアルゴリズムを使用して、年の値に基づいてハッシュ値 year_hash が計算されます。

  3. データは year_hash の値に基づいてパーティションにルーティングされます。

ベクトルパーティションキー

いいえ

PARTITION BY HASH(c1,c2,...,cn)

  • ホットパーティション分割はサポートされていません。

  • テーブルが作成された後、データはすべてのパーティションキー列に基づいてルーティングされます。

  • 最大 5 つのパーティションキー列がサポートされています。

  1. パーティションキー列 (c1,c2,...,cn) の値はベクトルパーティションキーとして使用され、コンシステントハッシュアルゴリズムによってベクトル内の各列のハッシュが計算されます。ベクトルパーティションキーに対応するハッシュのベクトルが取得されます。

  2. データはハッシュのベクトルに基づいてパーティションにルーティングされます。

RANGE パーティショニング

RANGE パーティショニングは、パーティションキー値またはパーティショニング関数の結果を事前に定義された境界と比較することで、データをルーティングします。これには、[RANGE COLUMNS パーティショニング] (列ベース) と [RANGE パーティショニング] (関数ベース) が含まれます。

RANGE パーティショニングと RANGE COLUMNS パーティショニングの比較

パーティションタイプ

サポートされるパーティションキー

パーティショニング関数のサポート

ステートメント構文

制限事項

ルーティングポリシー (ポイントクエリ)

RANGE COLUMNS パーティショニング

単一列のパーティションキーとベクトルパーティションキー

いいえ

PARTITION BY RANGE COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES LESS THAN (1,10,...,1000), PARTITION p2 VALUES LESS THAN (2,20,...,2000) ...)

ホットパーティション分割をサポートしています。多くの行が同じ c1 値 (例:88) を共有する場合、c2 で分割できます。

  1. パーティションキー列 (c1,c2,...,cn) の値が、ベクトルパーティションキーとして使用されます。

  2. このベクトルパーティションキーは、二分探索アルゴリズムに基づいて、データがルーティングされるパーティションを決定するために使用されます。

RANGE パーティショニング

単一列のパーティションキー

はい

PARTITION BY RANGE(YEAR(c1)) ( PARTITION p1 VALUES LESS THAN (2019), PARTITION p2 VALUES LESS THAN (2021) ...)

  • ホットパーティション分割はサポートされていません。

  • 以下のパーティショニング関数のみがサポートされています:

    • YEAR

    • MONTH

    • DAYOFMONTH

    • DAYOFWEEK

    • DAYOFYEAR

    • TO_DAYS

    • TO_MONTHS

    • TO_WEEKS

    • TO_SECONDS

    • UNIX_TIMESTAMP

    • SUBSTR/SUBSTRING

  1. YEAR 関数は、c1 列の値に基づいて年の値を計算するために使用されます。

  2. 年の値は、二分探索アルゴリズムに基づいてデータのルーティング先パーティションを決定するために使用されます。

LIST パーティショニング

LIST パーティショニングは RANGE パーティショニングと同様に機能しますが、範囲の代わりに個別の値のリストと値を照合します。これには [LIST COLUMNS パーティショニング] (列ベース) と [LIST パーティショニング] (関数ベース) が含まれます。

LIST パーティショニングと LIST COLUMNS パーティショニングの比較

パーティションタイプ

サポートされるパーティションキー

パーティショニング関数のサポート

ステートメント構文

制限事項

ルーティングポリシー (ポイントクエリ)

LIST COLUMNS パーティショニング

単一列のパーティションキーとベクトルパーティションキー

いいえ

PARTITION BY LIST COLUMNS (c1,c2,...,cn) ( PARTITION p1 VALUES IN ((1,10,...,1000),(2,20,...,2000) ), PARTITION p2 VALUES IN ((3,30,...,3000),(3,30,...,3000) ), ...)

ホットパーティション分割はサポートされていません。

  1. パーティションキー列 (c1,c2,...,cn) の値は、ベクトルパーティションキーとして使用されます。

  2. このベクトルパーティションキーは、二分探索アルゴリズムに基づいてデータのルーティング先パーティションを決定するために使用されます。

LIST パーティショニング

単一列のパーティションキー

はい

PARTITION BY LIST(YEAR(c1)) ( PARTITION p1 VALUES IN (2018,2019), PARTITION p2 VALUES IN (2020,2021) ...)

ホットパーティション分割はサポートされていません。

CO_HASH パーティショニング

PolarDB-X は、類似した値を持つ複数の列にまたがる水平パーティショニングが必要なテーブル向けに、CO_HASH パーティショニングも提供しています。

次の表は、CO_HASH と HASH および KEY パーティショニングを比較したものです。

CO_HASH パーティショニング、HASH パーティショニング、KEY パーティショニングの比較

項目

CO_HASH

KEY

HASH

ステートメント構文

PARTITION BY CO_HASH(c1, c2) PARTITIONS 8

PARTITION BY KEY(c1, c2) PARTITIONS 8

PARTITION BY HASH(c1, c2) PARTITIONS 8

単一列のパーティションキー

サポートされていません

サポートされています

サポートされています

ベクトルパーティションキー

サポートされています

サポートされています

サポートされています

ベクトルパーティションキー列に対するパーティショニング関数

サポートされています。例:

PARTITION BY CO_HASH(
-- c1 列の値の末尾 4 文字でテーブルをパーティション分割します。
RIGHT(c1, 4),
-- c2 列の値の末尾 4 文字でテーブルをパーティション分割します。
RIGHT(c2, 4))
PARTITIONS 8

サポートされていません

サポートされていません

パーティションキー列間の関係

列の値は類似している必要があります。パーティションキー列間の類似性を維持する必要があります。例:

  • c1 列と c2 列の値は常に同じです。

  • CO_HASH(c1, c2) が適しています。

  • c1 列と c2 列の値の末尾 4 文字は常に同じです。

  • CO_HASH(RIGHT(c1,4), RIGHT(c2,4)) が適しています。

複合インデックスのプレフィックスに似ています。

複合インデックスのプレフィックスに似ています。

プレフィックス付きパーティションキー列の等価クエリ、パーティションプルーニング、および例

サポートされています。例:

  • c1='x':パーティションプルーニングがサポートされており、クエリは単一のパーティションにルーティングされます。

  • c1='x' and c2='y':パーティションプルーニングがサポートされており、クエリは 0 個または 1 個のパーティションにルーティングされます。c1='x' と c2='y' のルーティング先のパーティションが異なる場合、パーティションは返されません。

サポートされています。例:

  • c1='x':パーティションプルーニングがサポートされており、クエリは 1 つ以上のパーティションにルーティングされます。値 x に対してホットパーティション分割を実行すると、複数のパーティションが返されます。

  • c1='x' and c2='y':パーティションプルーニングがサポートされており、クエリは単一のパーティションにルーティングされます。

サポートされていません。パーティションプルーニングには、すべてのパーティションキー列に対する等価条件が必要です。例:

  • c1='x':パーティションプルーニングなし。すべてのパーティションがスキャンされます。

  • c1='x' and c2='y':パーティションプルーニングがサポートされており、クエリは単一のパーティションにルーティングされます。

プレフィックスなしパーティションキー列の等価クエリ、パーティションプルーニング、および例

サポートされています。すべてのパーティションキー列に対する等価条件は、パーティションプルーニングをサポートします。例:

  • c2='x':パーティションプルーニングがサポートされており、クエリは単一のパーティションにルーティングされます。

  • c1='x' or c2='y':パーティションプルーニングがサポートされており、クエリは 1 つまたは 2 つのパーティションにルーティングされます。c1='x' と c2='y' のルーティング先のパーティションが同じ場合、1 つのパーティションが返されます。それ以外の場合、2 つのパーティションがスキャンされます。

サポートされていません。プレフィックス条件がない場合、すべてのパーティションがスキャンされます。例:

  • c2='x':すべてのパーティションがスキャンされます。

  • c1='x' or c2='y':すべてのパーティションがスキャンされます。

サポートされていません。プレフィックス条件がない場合、すべてのパーティションがスキャンされます。例:

  • c2='x':すべてのパーティションがスキャンされます。

  • c1='x' or c2='y':すべてのパーティションがスキャンされます。

範囲クエリ

サポートされていません。すべてのパーティションがスキャンされます。

サポートされていません。すべてのパーティションがスキャンされます。

サポートされていません。すべてのパーティションがスキャンされます。

ルーティングポリシー (ポイントクエリ)

  1. c1 列から等価クエリの元の値 v1 を抽出します。この操作は他の列にも適用できます。

  2. 列がパーティショニング関数を使用する場合、関数の値は f1 = partFunc(v1) という式で計算されます。それ以外の場合、関数の値は v1 です。

  3. コンシステントハッシュアルゴリズムを使用して、f1 のハッシュ c1_hash を計算します。ハッシュは long 型の整数です。

  4. データは c1_hash の値に基づいて異なるパーティションにルーティングされます。

詳細については、「HASH パーティショニング セクションのルーティングポリシー」をご参照ください。

ルーティングポリシーはハッシュパーティショニングと同様です。

ホットパーティション分割

サポートされていません。c1='88' のようなホットキー値に対して、さらなるホットパーティション分割は実行できません。

サポートされています

サポートされていません

パーティション分割、マージ、移行などのパーティション管理

サポートされています

サポートされています

サポートされています

サブパーティショニング

サポートされています

サポートされています

サポートされています