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

PolarDB:非パーティションテーブルをレンジパーティションテーブルに変換する

最終更新日:May 27, 2024

PolarDBを使用すると、データを再配布することなく、パーティション分割されていないテーブルをレンジパーティション分割されたテーブルにシームレスに変換できます。 このトピックでは、PolarDBで非パーティションテーブルをレンジパーティションテーブルに変換する方法について説明します。

背景情報

PolarDBが非パーティションテーブルをレンジパーティションテーブルに変換すると、非パーティションテーブルのデータは検証なしで最初のパーティションに転送されます。 他のパーティションは空のままです。 ほとんどの場合、この機能はPolarDBで使用され、ALTER partition byステートメントを使用してデータを書き換えることなく、履歴データを最初のパーティションに転送します。 これにより、非パーティションテーブルをレンジパーティションテーブルにすばやく変換できます。

説明

パーティション分割されていないテーブルを範囲パーティション分割されたテーブルにすばやく変換する方法の詳細については、DingTalkグループ24490017825を結合してテクニカルサポートを取得してください。

前提条件

クラスターは、リビジョンバージョンが8.0.2.2.10以降のPolarDB for MySQL 8.0.2を実行します。 クラスターのバージョンを表示する方法については、「エンジンバージョン」トピックの「エンジンバージョンの照会」を参照してください。

制限

パーティション分割されていないテーブルにINSTANT ADD COLUMNステートメントを使用して追加されたフィールドが含まれている場合、テーブルをレンジパーティション分割されたテーブルに変換することはできません。

Usage

非パーティションテーブルをレンジパーティションテーブルに変換する

構文

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

ALTER TABLE table_name
レンジによるパーティー {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...)
検証なし; 

partition_definition:

PARTITION partition_name
       {(value | value_list) | MAXVALUE} 
より少ない値

Parameters

パラメーター

説明

table_name

テーブルの名前。

column_list

パーティションキー列のリスト。 式はサポートされていません。

範囲 (expr)

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

partition_name

パーティションの名前。

value_list

パーティションの値。

MAXVALUE

パーティション内の最大値。

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

テーブルの作成t1 (
'a' int、'b' int、主キー (a, b);

t1の値に挿入する (1,1) 、(2,1) 、(3,1) 、(4,1) 、(111,111) 、(3333,333);

範囲によるテーブルt1パーティションの変更 (a) (
  パーティションp0の値が (100) 未満、
  パーティションp1の値が (200) 未満
) 検証なし; 

t1テーブルのすべてのデータは、検証なしでp0パーティションに転送されます。 非パーティションテーブルのすべてのデータがp0パーティションの値の範囲内にあることを確認した場合、このステートメントを実行して、非パーティションテーブルをレンジパーティションテーブルに変換できます。

説明

非パーティションテーブルのすべてのデータが、パーティションテーブルの最初のパーティションの値の範囲内にあることを確認します。 そうしないと、テーブルがパーティションテーブルに変換された後、値の範囲を超えるデータを取得できません。

他のパーティションテーブルでの使用

非パーティションテーブルをレンジパーティションテーブルに変換するためのWITHOUT VALIDATIONキーワードは、INTERVALパーティションテーブルに使用して、同じ間隔でrangeパーティションを自動的に作成できます。

テーブルの作成t1 (
 ID int,
 日付日付,
 主要なキー (ID、日付)
);
ALTERテーブルt1
パーティションによるRANGE COLUMNS (日付) INTERVAL(DAY, 1) (
  PARTITION p0値より少ない ('2023-01-31 ')
) 検証なし; 

パフォーマンス

非パーティションテーブルをパーティションテーブルに変換するためにネイティブMySQLで使用されるメカニズムと比較して、非パーティションテーブルをレンジパーティションテーブルに変換するためにPolarDBで使用される機能は、テーブルのメタデータを変更するだけで、テーブルデータを書き換えません。 したがって、テーブルの変換に必要な時間は0.1秒未満です。 非パーティションテーブルをパーティションテーブルに変換するためにネイティブMySQLで使用されるメカニズムには、検証とデータの書き換えが必要です。 したがって、より長い時間が必要とされる。 変換期間は、テーブルデータのサイズに基づいて増加します。

テーブルサイズ

ネイティブMySQL

PolarDBで

1 GB (6,001,215行)

52.24秒

0.10秒

10 GB (59,986,052行)

8分45.82秒

0.07秒