0

特に数百万のレコードを含む既存のテーブルに新しいフィールドを追加する場合、移行を行う際に現在 1 つの問題に直面しています。完了するまでに非常に長い時間がかかります。では、移行を高速化するための特別なトリックの方法はあるのでしょうか?

4

1 に答える 1

0

テーブルをロックせずにこれを行うには、正しい列を持つ新しいテーブルを作成し、古いテーブルからデータを選択し、古いテーブルの名前を変更し、新しいテーブルの名前を変更し、「古い名前の変更されたテーブル」を削除します。

このようなものもあります。

CREATE TABLE `table_new` LIKE `table`;
ALTER TABLE `table_new` ADD COLUMN ...;
ALTER TABLE `table_new` ADD COLUMN ...;
ALTER TABLE `table_new` ADD COLUMN ...;
INSERT INTO `table_new` SELECT x, y, z, 'newcol', 'newcol2', 'newcol3' FROM `table`
RENAME TABLE `table` TO `table_old`;
RENAME TABLE `table_new` TO `table`;
-- DROP TABLE `table_old` -- Might just leave this out for now, who knows...

考慮すべきもう 1 つのことは、インデックスであり、挿入のためにオフにし、挿入後に再度有効にすることができます。これにより、常に再計算する必要がなくなります。

于 2013-03-27T07:22:30.960 に答える