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

PolarDB:非パーティションテーブルから RANGE パーティションテーブルへの変換

最終更新日:Aug 07, 2026

PolarDB for MySQLPolarDB は、データを再配置することなく、非パーティションテーブルをレンジパーティションテーブルに迅速に変換できます。 このトピックでは、PolarDB を使用して変換する方法について説明します。

背景情報

PolarDBでは、非パーティションテーブルをレンジパーティションテーブルに変換すると、非パーティションテーブルのデータは検証なしで最初のパーティションに配置され、他のパーティションは空になります。PolarDBでは、この方法は通常、履歴データを最初のパーティションにアーカイブし、標準のALTER PARTITION BY構文で必要となるデータの書き換えを回避するために使用されるため、変換が高速になります。

適用範囲

  • MySQL 8.0.2: リビジョンバージョンは 8.0.2.2.19 以降である必要があります。

  • MySQL 8.0.1:リビジョンバージョンは 8.0.1.1.34 以降である必要があります。

  • テーブルにINSTANT カラムまたはカラムストアインデックス (IMCI) がある場合、クラスターバージョンはMySQL 8.0.2 で、リビジョンバージョンは 8.0.2.2.36 以降である必要があります。

クラスターバージョンは、「エンジンバージョンのクエリ」を参照して確認できます。

制限事項

INSTANT ADD COLUMN ステートメントで追加された列があるテーブルは、RANGE パーティションテーブルに変換できません。

使用方法

構文と例

  • 構文

    ALTER TABLE ステートメントで、WITHOUT VALIDATION キーワードを追加します。

    ALTER TABLE table_name
    PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
    (partition_definition [, partition_definition] ...)
    WITHOUT VALIDATION;

    ここで、partition_definition は:

    PARTITION partition_name
           VALUES LESS THAN {(value | value_list) | MAXVALUE}
  • パラメーター

    パラメーター

    説明

    table_name

    テーブルの名前。

    column_list

    RANGE COLUMNS パーティションで使用するパーティションキー列のリストです。式はサポートされていません。

    RANGE (expr)

    RANGE パーティション分割に使用される式。

    partition_name

    パーティションの名前。

    value_list

    パーティションの境界値。

    MAXVALUE

    最大値。

  • 例

    非パーティションテーブル t1 をレンジパーティションテーブルに変換します。

    CREATE TABLE t1 (
    `a` int ,
    `b` int ,
    Primary Key(a, b));
    
    insert into t1 values(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
    
    alter table t1 partition by range(a) (
      partition p0 values less than (100),
      partition p1 values less than (200)
    ) WITHOUT VALIDATION;

    t1 では、すべてのデータがパーティション p0 に検証を行わずに移動されます。非パーティション化テーブル内のすべてのデータがp0 で宣言された境界内に収まることを確認した場合、この構文を使用して非パーティション化テーブルをレンジパーティション化テーブルに迅速に変換できます。

    説明
    • 非パーティションテーブルのすべてのデータが、最初のパーティションの境界内に収まることを確認してください。そうしないと、変換後にパーティション分割ルールを満たさないデータが取得できなくなる可能性があります。

    • WITHOUT VALIDATION オプションを使用すると、非パーティションテーブルのすべてのデータが検証なしで最初のパーティションに移動されます。DDL ステートメントで指定されたパーティション境界が、非パーティションテーブルのすべてのデータと一致することを確認してください。

組み合わせ構文

WITHOUT VALIDATION は INTERVAL パーティション表で使用でき、この表は同じ間隔で自動的に RANGE パーティションを作成します。 例:

CREATE TABLE t1(
 ID int,
 DATE DATE,
 PRIMARY KEY (ID,DATE)
);
ALTER TABLE t1 
partition by RANGE COLUMNS(date) INTERVAL(DAY, 1) (
  PARTITION p0 VALUES LESS THAN ('2023-01-31')
) without validation;

パフォーマンスの比較

PolarDB では、ネイティブの MySQL 方式と比較して、非パーティションテーブルをレンジパーティションテーブルに変換する際にテーブルのメタデータのみを更新し、データの書き換えは行いません。この変換は 0.1 秒未満で完了します。ネイティブの MySQL 方式では、データの検証と書き換えを行う必要があり、データ量が増加するにつれて、より長い時間がかかります。

テーブルサイズ

標準の MySQL ALTER TABLE PARTITION BY

PolarDB構文と例

1 GB (6,001,215 行)

52.24 秒

0.10 秒

10 GB (59,986,052 行)

8 分 45.82 秒

0.07 秒