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