数百万行のテーブルがあります。次のクエリをコミットします。
ALTER TABLE my_data ADD KEY `sex_birth` (`sex`, `birth`);
これには 38 分 44.53 秒かかります。
これを最適化してより高速に実行するにはどうすればよいですか?
このクエリを実際に高速化することはできません。しかし、アプリケーションが長時間停止しないように、何かできることは確かにあります。
このテーブルのコピーを別の名前で作成しますmy_data_alter
。このテーブルで変更を実行します。
変更が完了した時点までコピーを取得したため、実行されたすべての更新/挿入/削除のログが必要になります。次に、これらのクエリを に実行する必要がありますmy_data_alter
。
テーブルで発生するトランザクションの数が多すぎると、終わりのないループのようなものになります。
最後に、1 つのクエリで 2 つのテーブルの名前を変更するだけです。
これは非常にややこしいことだと理解しています。オフピーク時にこの種のことを行います。
この仕事をするスクリプトを書くことをお勧めします..