を発行します。HUGEテーブル内の列のデータ型を変更します。パフォーマンスは、私は私のテーブルの上にこれを実行したい
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
しかし、私のテーブルは巨大である、それは65M(6500万)行以上のものを持っています。今すぐ実行すると、このコマンドを実行するには約50分かかります。テーブルを変更するより良い方法はありますか?
を発行します。HUGEテーブル内の列のデータ型を変更します。パフォーマンスは、私は私のテーブルの上にこれを実行したい
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
しかし、私のテーブルは巨大である、それは65M(6500万)行以上のものを持っています。今すぐ実行すると、このコマンドを実行するには約50分かかります。テーブルを変更するより良い方法はありますか?
さて、あなたは
ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)
を必要とする。しかし、あなたは正しいです、それは、変更を行うためにしばらく時間がかかります。実際には、MySQLのテーブルを変更する高速な方法はありません。
変更中に問題がダウンすることはありますか?その場合は、考えられる方法があります。新しいテーブルにテーブルをコピーし、コピーのカラム名を変更してから、コピーの名前を変更します。
おそらく、本番システムのテーブルで列名を日常的に変更することは良い考えではないと考えているでしょう。
Oakを使用して、ダウンタイムなしにスキーマの変更を処理できます。
oak-online-alter-tableオリジナルテーブルのスキーマをコピーし、変更を適用してからデータをコピーします。オークが元のテーブルにいくつかのトリガーを置くので、CRUD操作は依然として呼び出すことができるので、操作中にデータが失われることはありません。
オークの著者がこのメカニズムについての詳細な説明を提供し、他のツールを提案しているother questionを参照してください。
perconaツールキットを使用するいや、遅くなるだろう。 ALTER文は1回のアクションです。それを待って、もう一度やり直す必要はないと願っています。 –
巨大なテーブル?いいえ。非常に大きい?はい。 –