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

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

最終更新日:Mar 29, 2026

LIST パーティション分割は、明示的な値リストに基づいて行をパーティションに割り当てます。各パーティションには、パーティションキーの値が定義済みの VALUES IN リストに含まれる行が格納されます。DEFAULT パーティションが存在しない場合、どのパーティションにも対応しないキー値を持つ行を挿入するとエラーが返されます。一致しないすべての行をキャプチャするには、DEFAULT パーティションを追加してください。

LIST パーティション分割と LIST COLUMNS パーティション分割の比較については、「概要」トピック内の「LIST パーティション分割と LIST COLUMNS パーティション分割の比較」表をご参照ください。

LIST パーティション分割の適用範囲

LIST パーティション分割は、パーティションキーの値が有限かつ既知のセットに属する場合(例:リージョンコード、カテゴリ ID、ステータスフラグなど)に適しています。個別の値のセットが継続的に増加する可能性がある場合は、HASH パーティション分割を検討してください。新しい値ごとに新しいパーティションを追加するのは、すぐに非現実的になるためです。

構文

CREATE TABLE ...
PARTITION BY LIST(partition_expr) [PARTITIONS number]
(
  PARTITION part_name VALUES IN (list_bound_value_set),
  PARTITION part_name VALUES IN (list_bound_value_set),
  ...
)

partition_expr:
    partition_column
  | partition_func(partition_column)

list_bound_value_set:
  list_bound_value[, list_bound_value, ...]

-- サポートされているパーティション分割関数
partition_func:
    TO_DAYS
  | TO_MONTHS
  | TO_WEEKS
  | TO_SECOND
  | UNIX_TIMESTAMP
  | MONTH
  | DAYOFWEEK
  | DAYOFMONTH
  | DAYOFYEAR
  | SUBSTR
  | SUBSTRING
  | RIGHT
  | LEFT

主な構文要素:

要素説明
partition_expr列名、または列に適用されるサポートされているパーティション分割関数
list_bound_value_setこのパーティションに対応する 1 つ以上のカンマ区切りの値
DEFAULT一致しないすべての行をこのパーティションにルートするキャッチオール値

制限事項

制限デフォルト値
テーブルあたりの最大パーティション数8,192
パーティションキー内の最大列数5
パーティション名の最大長16 文字

その他の制約:

  • パーティション分割関数は単一列のパーティションキーに対してサポートされています。サポートされるデータの型は使用する関数によって異なります。

  • パーティション分割関数はベクターパーティションキー(複合パーティションキー)ではサポートされていません。

  • 入れ子になったパーティション分割関数はサポートされていません。

  • パーティション名はテーブル内で一意である必要があります。

  • パーティションキー列が TIMESTAMP のようなタイムゾーンに依存するデータの型を使用している場合は、UNIX_TIMESTAMP パーティション分割関数を使用してください。

サポートされているデータの型

以下のデータの型がパーティションキー列の型としてサポートされています:

カテゴリデータの型
整数BIGINTBIGINT UNSIGNEDINTINT UNSIGNEDMEDIUMINTMEDIUMINT UNSIGNEDSMALLINTSMALLINT UNSIGNEDTINYINTTINYINT UNSIGNED
日付および時刻DATETIMEDATETIMESTAMP
文字列CHARVARCHAR

パーティション分割関数を使用した単一列パーティションキー

次の例では、DATETIME 型の birthday 列をパーティションキーとして使用しています。TO_DAYS 関数により日付値が日数に変換され、特定の日付に基づいて行がパーティションに割り当てられます。pm パーティションは DEFAULT を使用して、p1p2、または p3 にリストされていない日付を持つすべての行をキャプチャします。pm パーティションが存在しない場合、このような行を挿入するとエラーが返されます。

CREATE TABLE tb_l_fn(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime not null,
  primary key(id)
)
PARTITION BY LIST(TO_DAYS(birthday))
(
  PARTITION p1 VALUES IN (TO_DAYS('2020-01-01'), TO_DAYS('2020-02-01')),
  PARTITION p2 VALUES IN (TO_DAYS('2021-01-01'), TO_DAYS('2021-02-01')),
  PARTITION p3 VALUES IN (TO_DAYS('2022-01-01')),
  PARTITION pm VALUES IN (DEFAULT)
)

その他のサポートされているパーティション分割関数については、「パーティション分割関数」をご参照ください。

パーティション分割関数を使用しない単一列パーティションキー

次の例では、id 列をパーティションキーとして使用し、特定の ID 値を 3 つの名前付きパーティションに割り当てています。どのパーティションにもリストされていない ID を持つ行は、デフォルトパーティション pm に送られます。

CREATE TABLE tb_l(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime not null,
  primary key(id)
)
PARTITION BY LIST(id)
(
  PARTITION p1 VALUES IN (1000, 1001, 1002),
  PARTITION p2 VALUES IN (2000, 2001, 2002),
  PARTITION p3 VALUES IN (3000),
  PARTITION pm VALUES IN (DEFAULT)
)

ベクターパーティションキー(複合列)

PARTITION BY LIST で複数の列をパーティションキーとして使用する場合、PolarDB for Xscale は自動的にその文を LIST COLUMNS パーティション分割に変換します。

次の例では、birthday および id を 2 列のパーティションキーとして使用しています:

-- ベクターパーティションキーを使用した LIST による元の文
CREATE TABLE tb_l(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime not null,
  primary key(id)
)
PARTITION BY LIST(birthday, id)
(
  PARTITION p1 VALUES IN (('1990-04-03', 1000), ('1991-04-03', 2000)),
  PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
  PARTITION pm VALUES IN (DEFAULT)
)

PolarDB for Xscale は上記の文を、同等の LIST COLUMNS 定義に変換します:

-- 自動変換後の同等の LIST COLUMNS パーティション分割
CREATE TABLE tb_l(
  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 (('1990-04-03', 1000), ('1991-04-03', 2000)),
  PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
  PARTITION pm VALUES IN (DEFAULT)
)

次のステップ