LIST パーティショニングは、列の値が事前定義された個別の値のセットに一致するかどうかに基づいて、行をパーティションに割り当てます。データが販売リージョン、製品タイプ、状態コードなど、明確に定義されたカテゴリに分類され、効率的なクエリや一括削除などのパーティションレベルの操作のために各カテゴリを独自のパーティションに分離したい場合に使用します。
PolarDB for MySQL は、2 つのバリアントをサポートしています:
LIST:単一の INT 式によってパーティション分割します。
LIST COLUMNS:INT、文字列、DATE、または DATETIME 型の 1 つ以上の列によってパーティション分割します。
構文
CREATE TABLE ... PARTITION BY LIST {(expr) | COLUMNS(column_list)}
(
partition_definition [, partition_definition] ...
);各 partition_definition は、次の形式に従います:
PARTITION partition_name
VALUES IN (value_list)パラメーター
| パラメーター | 説明 |
|---|---|
expr | パーティション式。INT 値を返す必要があります。文字列式はサポートされていません。 |
column_list | LIST COLUMNS で使用されるパーティションキー列のリスト。式はサポートされていません。列参照のみが許可されます。 |
value_list | 行をこのパーティションにマッピングする列挙値。値は、テーブル内のすべてのパーティションで一意である必要があります。 |
partition_name | パーティションの名前。テーブル内で一意である必要があります。 |
制限事項
LIST:
式は INT 値を返す必要があります。文字列式はサポートされていません。
単一列のパーティションキーのみをサポートします。
LIST COLUMNS:
式をサポートせず、列参照のみを受け入れます。
複合パーティションキーをサポートします。
サポートされている列の型:INT、文字列型、DATE、および DATETIME。
例
INT 列によるパーティション分割 (LIST)
次の例では、売上テーブルを amount でパーティション分割します。amount の値が 1 または 2 の行はパーティション p0 に、3 または 4 の行は p1 に、5 または 6 の行は p2 に格納されます。
CREATE TABLE sales_list
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST (amount)
(
PARTITION p0 VALUES IN (1, 2),
PARTITION p1 VALUES IN (3, 4),
PARTITION p2 VALUES IN (5, 6)
);文字列型列によるパーティション分割 (LIST COLUMNS)
LIST COLUMNS は文字列型の列をサポートしているため、数値マッピングなしでテキスト値に基づいて直接パーティション分割できます。次の例では、国を 3 つのリージョンパーティションにグループ化します。
CREATE TABLE sales_list_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST COLUMNS(country)
(
PARTITION europe VALUES IN ('FRANCE', 'ITALY'),
PARTITION asia VALUES IN ('INDIA', 'PAKISTAN'),
PARTITION americas VALUES IN ('US', 'CANADA')
);