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

PolarDB:RANGE

最終更新日:Mar 29, 2026

レンジパーティショニングは、テーブルデータを、定義された範囲内に収まる列値に基づいて複数のパーティションに分割する手法です。各パーティションには、パーティションキーが指定された境界値未満である行が格納され、境界値は厳密に単調増加でなければなりません。

以下の用途では、レンジパーティショニングが有効です:

  • 期間ごとのクエリまたはデータ削除 — 日付フィルター付きの DELETE を実行する代わりに、パーティション全体をドロップできます。これは大規模なテーブルにおいて、大幅に高速です。

  • 連続する数値範囲によるパーティショニング — たとえば、売上金額、ID、スコアなどです。

  • パーティションプルーニングによるクエリ性能の向上 — パーティションキーでフィルター処理を行うクエリでは、関係のないパーティションを完全にスキップできます。

PolarDB for MySQL では、次の 2 種類の構文をサポートしています:PARTITION BY RANGE(式ベース、単一列)および PARTITION BY RANGE COLUMNS(列ベース、複数列およびより多くのデータ型をサポート)。

構文

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

ここで、partition_definition は以下のとおりです:

PARTITION partition_name
    VALUES LESS THAN {(value | value_list) | MAXVALUE}

パラメーター

パラメーター説明
exprパーティション式です。INT 型の値に評価される必要があります。文字列型はサポートされていません。
column_listRANGE COLUMNS で使用するパーティションキー列の一覧です。式はサポートされておらず、列名のみが許可されます。
valueパーティションの上限境界値です。
value_list上限境界値の一覧(列ごとに 1 つずつ)。複数のパーティションキーが指定されている場合の RANGE COLUMNS で使用します。
MAXVALUEパーティションの最大値です。すべての行が対応するパーティションに割り当てられるよう、必ず最後のパーティションとして MAXVALUE を含むパーティションを追加してください。
partition_nameパーティションの名前です。テーブル内で一意である必要があります。

RANGE と RANGE COLUMNS の比較

機能PARTITION BY RANGEPARTITION BY RANGE COLUMNS
パーティションキー数単一列のみ1 列以上
サポート非サポート(列名のみ許可)
サポートされるデータ型INT(式は INT に評価される必要あり)INT、文字列型、DATE、DATETIME

DATE や DATETIME 型の列を直接パーティションキーとして使用したい場合、または複数列にまたがる複合パーティションキーが必要な場合は、RANGE COLUMNS を使用してください。

数値範囲によるパーティショニング

以下の例では、売上テーブルを amount 列でパーティション化しています。各パーティションには、amount が境界値未満である行が格納されます。最終パーティションでは、残りのすべての行をカバーするために MAXVALUE を使用しています。

CREATE TABLE sales_range
(
  dept_no     INT,
  part_no     INT,
  country     VARCHAR(20),
  date        DATE,
  amount      INT
)
PARTITION BY RANGE(amount)
(
  PARTITION p0 VALUES LESS THAN (1000),
  PARTITION p1 VALUES LESS THAN (2000),
  PARTITION p2 VALUES LESS THAN (3000),
  PARTITION p3 VALUES LESS THAN (MAXVALUE)
);

日付列によるパーティショニング(RANGE COLUMNS)

RANGE COLUMNS を使用すると、式でラップすることなく、DATE 型の列を直接パーティションキーとして指定できます。以下の例では、create_date 列を基準に月次パーティションを作成しています。

CREATE TABLE sales_range_columns
(
  dept_no       INT,
  part_no       INT,
  country       VARCHAR(20),
  create_date   DATE,
  amount        INT
)
PARTITION BY RANGE COLUMNS(create_date)
(
  PARTITION p1 VALUES LESS THAN ('2023-01-01'),
  PARTITION p2 VALUES LESS THAN ('2023-02-01'),
  PARTITION p3 VALUES LESS THAN ('2023-03-01'),
  PARTITION p4 VALUES LESS THAN ('2023-04-01')
);

複数列によるパーティショニング(RANGE COLUMNS)

RANGE COLUMNS では、複合パーティションキーがサポートされます。

CREATE TABLE sales_range_columns
(
  dept_no   INT,
  part_no   INT,
  country   VARCHAR(20),
  date      DATE,
  amount    INT
)
PARTITION BY RANGE COLUMNS(dept_no, part_no)
(
  PARTITION p1 VALUES LESS THAN (1000, MAXVALUE),
  PARTITION p2 VALUES LESS THAN (2000, MAXVALUE),
  PARTITION p3 VALUES LESS THAN (3000, MAXVALUE),
  PARTITION p4 VALUES LESS THAN (4000, MAXVALUE)
);