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秒 |