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

PolarDB:LIST COLUMNS パーティション分割

最終更新日:Mar 29, 2026

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 はデフォルト・パーティションであり、p1p2、または p3 に一致しない行をキャッチします。

説明

個別の値のリストが非常に大きくなる場合(たとえば数百の日付など)、通常は RANGE COLUMNS パーティション分割の方が定義および保守が容易です。