2

ユーザー情報を含む100万行を超えるmysqlテーブルがあります。そのテーブルに列「パスワード」を追加し、ランダムにパスワードを生成し、すべてのレコードを更新したい (PHP を使用)。このタスクを実行する最速の方法は何ですか? 前もって感謝します。

4

2 に答える 2

-1

テーブルを変更する操作には非常に時間がかかる可能性があることに注意してください。この 2 つの手順を分けることをお勧めします。

1) テーブルを変更します。ここでは、次の手順 (疑似コード) をお勧めします。

  • old_table と同じように new_table を作成する
  • alter new_table add column password
  • new_table (列) に挿入 select * from old_table
  • old_table を old_table_bck に、new_table を old_table に名前変更します。
  • old_table_bck を削除

この時点で、新しい列を含む元のテーブルができました。

2) 構造を変更した後、新しい列「パスワード」に PHP を入力できます。InnoDB をストレージ エンジンとして使用している場合、更新でテーブルをロックしていないため、時間は問題になりません。トランザクション内でこれを行う場合は、更新プロセスを 1 つの大きなバルクを挿入するのではなく、小さなトランザクションに分割することをお勧めします。

(最小限の) ダウンタイムが取れない場合は、 を参照することをお勧めしますpt-online-schema-change。データベースの実行中にスキーマを変更するためにダウンタイムを発生させることができない主要なデータベースでこのツールを使用します。上記の手順 (1) を大まかに実行し、さらにトリガーを使用して、変更プロセスの実行中に元のテーブルに挿入されたデータが変更されたテーブルにも書き込まれるようにします。

于 2013-07-17T08:36:08.203 に答える