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

PolarDB:範囲-範囲

最終更新日:Mar 29, 2026

PolarDB for MySQL は RANGE-RANGE コンポジット・パーティションをサポートしており、トップレベルのパーティションおよび各サブパーティションの両方がパーティション戦略として RANGE または RANGE COLUMNS を使用します。各行はまずパーティションキー値に基づいてパーティションに割り当てられ、次にそのパーティション内でサブパーティションキー値に基づいてサブパーティションに割り当てられます。

構文

CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
   SUBPARTITION BY RANGE(expr)
[(partition_definition [, partition_definition] ...)];

partition_definition

PARTITION partition_name
       VALUES LESS THAN {(value | value_list) | MAXVALUE}
[(subpartition_definition [, subpartition_definition] ...)]

subpartition_definition

SUBPARTITION subpartition_name
       VALUES LESS THAN {value | MAXVALUE}

パラメーター

パラメーター説明
exprパーティション式です。INT 型である必要があります。文字列型はサポートされていません。
column_listRANGE COLUMNS() で使用するパーティションキー列のリストです。式はサポートされていません。
valueパーティションの境界値です。
value_listRANGE COLUMNS() で使用するパーティションキー列の値リストです。
MAXVALUEパーティションの最大値です。
partition_nameパーティションの名前です。テーブル内で一意である必要があります。
subpartition_nameサブパーティションの名前です。テーブル内で一意である必要があります。

RANGE-RANGE パーティションテーブル

トップレベルで dept_no でパーティションし、各パーティション内で part_no でサブパーティションします。

CREATE TABLE sales_range_range
(
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT
)
PARTITION BY RANGE(dept_no)
SUBPARTITION BY RANGE(part_no)
(
  PARTITION p0 VALUES LESS THAN (1000) (
    SUBPARTITION s0 VALUES LESS THAN(100),
    SUBPARTITION s1 VALUES LESS THAN(200),
    SUBPARTITION s2 VALUES LESS THAN(300),
    SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
  ),
  PARTITION p1 VALUES LESS THAN (2000)
  (
    SUBPARTITION s4 VALUES LESS THAN(100),
    SUBPARTITION s5 VALUES LESS THAN(200),
    SUBPARTITION s6 VALUES LESS THAN(300),
    SUBPARTITION s7 VALUES LESS THAN(MAXVALUE)
  ),
  PARTITION p2 VALUES LESS THAN (MAXVALUE)
  (
    SUBPARTITION s8 VALUES LESS THAN(100),
    SUBPARTITION s9 VALUES LESS THAN(200),
    SUBPARTITION s10 VALUES LESS THAN(300),
    SUBPARTITION s11 VALUES LESS THAN(MAXVALUE)
  )
);

dept_no = 500 かつ part_no = 150 の行は、パーティション p0(500 < 1000 のため)に割り当てられ、その後サブパーティション s1(150 が 100~200 の範囲に入るため)に割り当てられます。

RANGE COLUMNS-RANGE パーティションテーブル

RANGE COLUMNS を使用して複合キー (dept_no, part_no) でパーティションし、amount でサブパーティションします。

CREATE TABLE sales_range_columns_range
(
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT
)
PARTITION BY RANGE COLUMNS(dept_no, part_no)
SUBPARTITION BY RANGE(amount)
(
  PARTITION p1 VALUES LESS THAN(1000, MAXVALUE)(
    SUBPARTITION s0 VALUES LESS THAN(100),
    SUBPARTITION s1 VALUES LESS THAN(200),
    SUBPARTITION s2 VALUES LESS THAN(300),
    SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
  ),
  PARTITION p2 VALUES LESS THAN(2000, MAXVALUE)(
    SUBPARTITION s4 VALUES LESS THAN(100),
    SUBPARTITION s5 VALUES LESS THAN(200),
    SUBPARTITION s6 VALUES LESS THAN(300),
    SUBPARTITION s7 VALUES LESS THAN(MAXVALUE)
  ),
  PARTITION p3 VALUES LESS THAN(MAXVALUE, MAXVALUE)(
    SUBPARTITION s8 VALUES LESS THAN(100),
    SUBPARTITION s9 VALUES LESS THAN(200),
    SUBPARTITION s10 VALUES LESS THAN(300),
    SUBPARTITION s11 VALUES LESS THAN(MAXVALUE)
  )
);

注意事項

  • サブパーティション名は単一のパーティション内だけでなく、テーブル全体で一意である必要があります。

  • SUBPARTITION BY RANGE(expr) で使用される expr は INT 値に評価される必要があります。文字列型はサポートされていません。

  • RANGE COLUMNS() は列リストを受け入れますが、式はサポートしていません。