0

既存のテーブルではなく、サブクエリの結果に対して mysql にフル スキャンを実行させることはできますか?

クエリがあるとしましょう:

DELETE FROM table_a WHERE id IN (SELECT id FROM table_b WHERE ...)

サブクエリが最大 10 件の結果を返し、table_a には数千件の結果が返されると確信している場合、table_a のレコードを強制的に検索し、table_b の結果をスキャンすることはできますか? Mysql は (に従ってEXPLAIN SELECT * FROM table_a...) table_a で ALL を実行し、table_b でインデックス ルックアップを実行することを主張します。

4

2 に答える 2

3

代わりに、フィールドにインデックスを追加しidて試すことができますINNER JOIN

DELETE a
FROM table_a a 
     INNER JOIN table_b b
         ON a.id = b.id;
于 2012-08-01T13:26:22.320 に答える
1

where someColumn in( ... )適切な結合と比較した場合の効率は恐ろしいものです。

代わりに、2 つのテーブルで内部結合を使用してください。

in索引を使用できない節およびその他の節は避けてください。

于 2012-08-01T13:29:01.930 に答える