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

PolarDB:PolarDB-X が提供するパーティションの種類

最終更新日:May 08, 2025

パーティションの種類

PolarDB-X は、データをパーティションにルーティングする方法を制御するために使用できる、以下のパーティションの種類を提供します。

  • HASH パーティション

    • HASH (MySQL の HASH パーティション構文と互換性があります)

    • KEY (MySQL の KEY パーティション構文と互換性があります)

  • RANGE パーティション

    • RANGE (MySQL の RANGE パーティション構文と互換性があります)

    • RANGE COLUMNS (MySQL の RANGE COLUMNS パーティション構文と互換性があります)

  • LIST パーティション

    • LIST (MySQL の LIST パーティション構文と互換性があります)

    • LIST COLUMNS (MySQL の LIST COLUMNS パーティション構文と互換性があります)

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

    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) は、範囲によってデータをパーティションにルーティングするために使用されます。

ハッシュ

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

いいえ

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 の値に基づいてパーティションにルーティングされます。

ベクターパーティションキー

いいえ

PARTITIONBY 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 パーティション

このパーティションの種類は RANGE パーティションに似ています。指定されたパーティションキー列の値、またはパーティション関数を含む指定された式によって返される値を比較および計算して、データが分散される定義済みパーティションの範囲を決定し、データをパーティションにルーティングします。 LIST パーティションの種類には、複数のパーティションキー列がパーティションキーとして使用されるかどうか、および使用方法に基づいて、[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) ...)

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

COHASH パーティション

PolarDB-X は、値が類似している異なるパーティションキー列に基づいてテーブルを水平方向にパーティション化する必要があるシナリオのために、新しいパーティションの種類である COHASH パーティションも提供しています。

COHASH パーティションは、HASH パーティションと KEY パーティションに似ています。次の表は、これらの種類を比較したものです。

COHASH パーティション、HASH パーティション、KEY パーティションの比較

項目

CO_HASH

KEY

ハッシュ

ステートメント構文

PARTITION BY CO_HASH(c1, c2) PARTITOINS 8

PARTITION BY KEY(c1, c2) PARTITOINS 8

PARTITION BY HASH(c1, c2) PARTITOINS 8

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

サポートされていません

サポートされています

サポートされています

ベクターパーティションキー

サポートされています

サポートされています

サポートされています

ベクターパーティションキー列のパーティション関数

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

PARTITION BY CO_HASH(
-- c1 列の値の最後の 4 文字でテーブルをパーティション化します。
RIGHT(c1, 4),
-- c2 列の値の最後の 4 文字でテーブルをパーティション化します。
RIGHT(c2, 4))
PARTITOINS 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': パーティションプルーニングがサポートされており、クエリはゼロまたは単一のパーティションにルーティングされます。 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' などのホットキー値では、それ以上のホットパーティション分割を実行できません。

サポートされています

サポートされていません

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

サポートされています

サポートされています

サポートされています

サブパーティション

サポートされています

サポートされています

サポートされています