LIST COLUMNS パーティション分割は、LIST パーティション分割の一種で、複数のパーティションキー列をサポートし、列の値を整数に変換するためのパーティション関数を必要としません。文字列、日付、日時型の列をそのままパーティションキーとして使用できます。両方式の比較については、概要の「LIST パーティション分割と LIST COLUMNS パーティション分割の比較」表をご参照ください。
構文
各パーティションには、そのパーティションに属する列値を明示的に記述します。すべてのパーティションにわたって値は一意である必要があります。他のどのパーティションにも一致しない行をキャッチオールとして扱うには、オプションの DEFAULT パーティションを使用します。
CREATE TABLE ...
PARTITION BY LIST COLUMNS(partition_column_list) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
[ PARTITION part_name VALUES IN (DEFAULT) ]
)
partition_column_list:
partition_column[, partition_column, partition_column, ...]
list_bound_value_set:
list_bound_value[, list_bound_value, list_bound_value, ...]制限事項
LIST COLUMNS パーティション分割は、パーティション関数をサポートしていません。
パーティションテーブルには、デフォルトで最大 8,192 個のパーティションを含めることができます。
パーティションキーは、デフォルトで最大 5 列まで構成できます。
各パーティション名は一意である必要があり、デフォルトで最大 16 文字まで使用できます。
TIMESTAMP 列をパーティションキー列として使用する場合は、その列に
UNIX_TIMESTAMP関数を適用する必要があります。
サポートされるデータの型
LIST COLUMNS パーティション分割では、パーティションキー列として以下のデータの型がサポートされます。
整数型: BIGINT、BIGINT UNSIGNED、INT、INT UNSIGNED、MEDIUMINT、MEDIUMINT UNSIGNED、SMALLINT、SMALLINT UNSIGNED、TINYINT、TINYINT UNSIGNED
日付・時刻型: DATETIME、DATE、TIMESTAMP
文字列型: CHAR、VARCHAR
固定小数点型: DECIMAL(小数部の桁数は 0 である必要があります)
例
文字列列によるパーティション分割
一般的なユースケースとして、リージョンやカテゴリなどの文字列列に基づいて行をパーティションにルーティングする方法があります。次の例では、都市名で顧客テーブルをパーティション分割し、都市を販売リージョンごとにグループ化しています。
CREATE TABLE customers (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
city VARCHAR(30),
PRIMARY KEY (id)
)
PARTITION BY LIST COLUMNS(city)
(
PARTITION p_north VALUES IN ('北京', '天津', '瀋陽'),
PARTITION p_east VALUES IN ('上海', '南京', '杭州'),
PARTITION p_south VALUES IN ('広州', '深セン', 'アモイ'),
PARTITION p_other VALUES IN (DEFAULT)
);p_other は、city 列の値がいずれにも該当しない行をキャッチします。
コンポジット・パーティションキーによるパーティション分割
複数の列の組み合わせに基づいて行をルーティングする必要がある場合は、コンポジット・パーティションキー(複数列)を使用します。次の例では、注文テーブルを birthday および id の両方でパーティション分割しています。
CREATE TABLE tb_lc (
id BIGINT NOT NULL AUTO_INCREMENT,
bid INT,
name VARCHAR(30),
birthday DATETIME NOT NULL,
PRIMARY KEY (id)
)
PARTITION BY LIST COLUMNS(birthday, id)
(
PARTITION p1 VALUES IN (('2020-01-01', 1000), ('2020-01-01', 2000)),
PARTITION p2 VALUES IN (('2021-01-01', 1000), ('2021-01-01', 2000)),
PARTITION p3 VALUES IN (('2022-01-01', 1000), ('2022-01-01', 2000)),
PARTITION pm VALUES IN (DEFAULT)
);pm はデフォルト・パーティションであり、p1、p2、または p3 に一致しない行をキャッチします。
個別の値のリストが非常に大きくなる場合(たとえば数百の日付など)、通常は RANGE COLUMNS パーティション分割の方が定義および保守が容易です。