私は今、私は別から、これらすべてのkey_idを削除したい私は良い(D1およびD2がインデックス化されている)だと思う10万人以上のレコードを持つテーブルでは約0.1秒で走るこのクエリ、MySQLでこの削除クエリをより効率的にするには?
SELECT key_id
FROM `info`
WHERE d1 > 10 AND d1 < 20 AND d2 > 5 AND d2 < 15
GROUP BY `key_id`
HAVING COUNT(*) > 300;
を持っています私はこれを試しました:
DELETE FROM `keys` WHERE id IN (<first query>)
キーテーブルには約7000行があります。サブクエリは毎回評価されるので、7000回、0.1秒ごと〜= 700秒実行しています。非常に遅い。それはそれを終了させていないので、私はそれが700秒かかるかわからない。私が確かに知っていることは、それが30秒以上かかるということです。
このクエリを改善するにはどうすればよいですか?
の代わりに登録しよう "'キー\ '\'。* '" "間を使用して試すことができます'DELETE'と' 'FROM'"キーワードを使用します。 (私は完全には必須ではないが、それは私がいつもやっているやり方なのかもしれない。なぜなら、私は常に 'SELECT \' keys \ '。* FROM' 「SELECT」キーワードを「DELETE」に置き換える前に、削除することが多く、結果セットを保存することがあります。ちょっとの場合 – spencer7593
@ spencer7593が必要です。行。http://dev.mysql.com/doc/refman/5.7/en/delete.html – scaisEdge
多テーブルのDELETE構文がOracle、SQL Server、MySQLなどで異なるため、混乱します – spencer7593