8

私は自分のテーブルでこれを実行したい:

ALTER TABLE table_name MODIFY col_name VARCHAR(255)

しかし、私のテーブルは巨大で、65M (6500 万) を超える行があります。実行すると、このコマンドの実行に 50 分近くかかります。テーブルを変更するより良い方法はありますか?

4

3 に答える 3

4

さて、あなたは必要です

 ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)

しかし、あなたは正しいです、変更を加えるには時間がかかります。MySQLでテーブルを変更するより速い方法は実際にはありません。

変更中のダウンタイムについて懸念がありますか?その場合、考えられるアプローチは次のとおりです。テーブルを新しいテーブルにコピーし、コピーの列名を変更してから、コピーの名前を変更します。

実動システムでテーブルの列名を定期的に変更することはお勧めできません。

于 2012-06-12T11:41:18.333 に答える
4

percona ツールキットを使用する別のバリ​​アント https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html

于 2015-11-26T15:18:56.163 に答える
0

Oak を使用すると、ダウンタイムなしでスキーマの変更に対応できます。

oak-online-alter-tableは元のテーブルのスキーマをコピーし、変更を適用してからデータをコピーします。操作中にデータが失われないように、オークが元のテーブルにいくつかのトリガーを配置するため、CRUD 操作を引き続き呼び出すことができます。

オークの作者がこのメカニズムについて詳細な説明を提供し、他のツールも提案している他の質問を参照してください。

于 2013-12-10T10:35:50.923 に答える