あなたの仮定は誤りです。サブクエリは1回だけ実行されます。結合よりも遅い理由は、IN
インデックスを利用することはできません。 WHERE
ごとに引数を1回スキャンする必要があります 句が評価されます。つまり、tableAの行ごとに1回評価されます。 IN
を置き換えるだけで、変数やストアドプロシージャを使用せずに、クエリを最適化できます。 したがって、結合すると:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
両方のテーブルからすべてのフィールドを取得してもかまわない場合を除いて、SELECT
で必要なフィールドを列挙する必要があります。 句; tableA.*
たとえば、構文エラーが発生します。