0

1時間経ちましたが、400万行のテーブルがあります。列を追加するのを忘れました。したがって、列を追加するためのaltertableステートメントを作成しました。

ALTER TABLE gblah
ADD zipcode varchar(5)

なぜこれが永遠にかかるのかわかりません。

4

2 に答える 2

1

phpMyAdminを介してMySQLプロセスを監視すると、テーブル全体がコピーされ、変更されてから、コピーバックされていることがわかります。大きなテーブルにはしばらく時間がかかります。さらに、コピーを作成するためのハードドライブの空き容量がない場合、ALTERクエリは失敗します。小さなサーバーで2GBのテーブルを変更しようとするのは難しい方法だということを学びました。

于 2012-06-15T19:17:54.867 に答える
1

MySQLのalterステートメントは、テーブルの行数に比例して時間がかかります。テーブルを変更するときはいつでも、その列を各レコードに追加する必要があるため、各レコードにアクセスする必要があります。これはPHPMyAdminの機能ではありません。また、列を追加するときはいつでも、alterステートメントを保持するロックの競合がある場合は、アプリケーションをオフラインにして追加する必要があります。

4Mはそれほど多くの行ではなく、競合があり、構造とデータベースエンジンによっては、時間がかかる場合があります(MyISAMはテーブル全体のロックを必要とし、同時実行性をうまく処理できないため、MyISAMの変更にはinnodbよりも時間がかかると思います)。

于 2012-06-15T18:48:12.333 に答える