かなり巨大なテーブル (~100 GB) に対して実行する削除クエリがいくつかあり、それらを可能な限り最適化したい:
delete from table1 where column1 < date_sub(now(), interval 100 hour);
column1 はdatetime
列です。この列のインデックスを作成すると、削除が高速化されると思います。それ以外に、ここで何かできることはありますか? 関数を使用するdate_sub()
とクエリが遅くなりますか? クエリを実行する前にその値を計算する必要がありますか?
delete from table2 where column2 = x;
column2 は table2 の主キーであるため、mysql のドキュメントによると、既にインデックスになっています。私の質問は次のとおりです。インデックスの種類はPRIMARY
、それは と同じINDEX
ですか? INDEX
高速化のために別のインデックスを作成する必要がありますか?
delete from table3 where column3 = y;
table3 には、column3 と column4 の複合主キーがあります。主キーのインデックスはありますが、削除クエリは列 4 を使用しないため、列 3 だけに別のインデックスを作成する必要がありますか? または結合された主キーがそれを行うでしょうか?
これらはかなり基本的な質問だと思いますが、私の状況に固有の明確な答えが見つからなかったので、助けていただければ幸いです!