MySQLテーブルパーティションをテーブルにプロモートする

Aug 17 2020

私のグーグル検索スキルはこれに対する解決策を見つけるのに十分ではありませんでした。可能であれば、テーブルのパーティションをそれ自体のテーブルに昇格させるにはどうすればよいですか?

のは、私が持っていると仮定しましょうpart0part1part2。新しいテーブルにALTER TABLE変換part0するために提供できるものはありますか?

私の考えたプロセスは、データがディスク上の別のファイルにすでに存在しているため、テーブルの作成プロセスは、SELECTクエリを使用して新しいテーブルを作成するよりも高速である可能性があるというものでした。

回答

RolandoMySQLDBA Aug 17 2020 at 23:04

必要ありませんSELECT。これは、純粋なDDLで実行できます。

この例では、パーティションテーブルが次のようになっているとします。

  1. データベース mydb
  2. テーブル mytable
  3. パーティション(part0part1part2

これは難しいかもしれませんが、ここに行きます

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;

これが行うmynewtableことは、最初にパーティションなしで作成し、他のすべての側面で同じスキーマを作成することです。次に、mynewtableテーブルをpart0。と交換します。

これがわからない場合は、実行してください

USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING; 
ALTER TABLE mytable
    EXCHANGE PARTITION p0
    WITH TABLE mynewtable
    WITHOUT VALIDATION
;

の行mynewtableと新しい行part0を調べて、次のことを確認します

  • mynewtable オリジナルのデータがあります part0
  • 新しいものpart0は空でなければなりません

転置が機能したことを確認したら、実行します

ALTER TABLE mytable DROP PARTITION p0;

これをラボまたはsqlfiddleでテストしてください。試してみる !!!

RickJames Aug 17 2020 at 21:54

はい、aPARTITIONTABLEです。ただし、パーティションをテーブルに、またはその逆に変換するには、いくつかの特別なコマンドが必要です。

「トランスポータブル表領域」およびFLUSHTABLES ptable FOREXPORTを参照してください。ALTER TABLE ptable DISCARD TABLESPACE; ALTER TABLE ptable IMPORTTABLESPACE。詳細はMySQL5.6と5.7以降で異なります。

http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioning テクニックを議論するいくつかの場所へのリンクがあります。