なぜこんなことを記事にしているのか。
仕事上、MySQLのALTER TABLE文は、テーブルを一時的にコピーしてから新旧テーブルを入れ替える形で処理されていると知った。 そうなのか!?と驚き、検索をかけた。
どこにそんなことが書かれているのか。
下記記事を参照。
MySQLのドキュメントはどうだろうか。
以下のリンク先に書かれていた。
一部引用すると
ストレージ、パフォーマンス、および並列性に関する考慮事項ほとんどの場合、ALTER TABLE は元のテーブルの一時的なコピーを作成します。MySQL は、そのテーブルを変更しているほかの操作を待ってから、処理を続行します。そのコピーに変更を組み込み、元のテーブルを削除したあと、新しいテーブルの名前を変更します。
ALTER TABLE後のテーブル定義でコピーを作って、最終的にそちらを使うことになっている。
インデックス作成はどうなのか。
やりたかったのはインデックス作成なので、それはどうなのだろうかとドキュメントを追ってみたところ、以下の引用部分を発見した。
一部の操作では、一時テーブルを必要としないインプレース ALTER TABLE が可能です。
- ・・・
- InnoDB と NDB に対するインデックスの追加または削除。
インデックス作成と削除は大丈夫ということだ。一安心した。InnoDBというのは検索をすればすぐに答えが出てくるので、気にしなくてよい。