MySQLテーブルパーティションをテーブルにプロモートする
私のグーグル検索スキルはこれに対する解決策を見つけるのに十分ではありませんでした。可能であれば、テーブルのパーティションをそれ自体のテーブルに昇格させるにはどうすればよいですか?
のは、私が持っていると仮定しましょうpart0
、part1
とpart2
。新しいテーブルにALTER TABLE
変換part0
するために提供できるものはありますか?
私の考えたプロセスは、データがディスク上の別のファイルにすでに存在しているため、テーブルの作成プロセスは、SELECT
クエリを使用して新しいテーブルを作成するよりも高速である可能性があるというものでした。
回答
必要ありませんSELECT
。これは、純粋なDDLで実行できます。
この例では、パーティションテーブルが次のようになっているとします。
- データベース
mydb
- テーブル
mytable
- パーティション(
part0
、part1
、part2
)
これは難しいかもしれませんが、ここに行きます
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でテストしてください。試してみる !!!
はい、aPARTITION
はTABLE
です。ただし、パーティションをテーブルに、またはその逆に変換するには、いくつかの特別なコマンドが必要です。
「トランスポータブル表領域」および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 テクニックを議論するいくつかの場所へのリンクがあります。