MySQLでALTER TABLEするとテーブルのコピーが作られるのか

はぁ、またしてもドキュメントを読んでいないことが露呈しました。

ALTER TABLE の処理では、元のテーブルの一時的なコピーが作成されます。 変更はこのコピーに対して実行されます。その後元のテーブルが削除され、新しいテーブルの名前が変更されます。この変更処理は、すべての更新が、エラーになることなく、確実に新しいテーブルに自動でリダイレクトされるように実行されます。ALTER TABLE の実行中、元のテーブルは他のクライアントによって読み取り可能です。このテーブルの更新とテーブルへの書き込みは、新しいテーブルの準備が整うまで停止されます。

注意: RENAME 以外のオプションを ALTER TABLE に指定した場合は、厳密にはデータをコピーする必要がないとき(カラム名の変更時など)でも、必ずテンポラリテーブルが MySQL によって作成されます。これについては今後修正する予定ですが、通常 ALTER TABLE はそれほど頻繁に使用されないため、TODOリストにおけるこの修正の優先順位はそれほど高くありません。 MyISAM テーブルについては、myisam_sort_buffer_size 変数に高い値を設定することによって、インデックスの再作成部分(再作成プロセスでもっとも処理が遅い部分)を迅速化することができます。
MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.5.4 ALTER TABLE 構文

なるほど、どうりでディスクフルになるわけですよ。対象テーブルのサイズは空き容量を超えてますから。

どうしたものか。。。

プロフィール

このブログ記事について

このページは、koshigoeが2007年8月16日 17:28に書いたブログ記事です。

ひとつ前のブログ記事は「りんごぅ!」です。

次のブログ記事は「PCセットアップ一区切り」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。