Asumsi Anda salah; subquery akan dieksekusi hanya sekali. Alasan mengapa lebih lambat daripada bergabung adalah karena IN
tidak dapat memanfaatkan indeks; ia harus memindai argumennya sekali untuk setiap kali WHERE
klausa dievaluasi, yaitu, sekali per baris dalam tabelA. Anda dapat mengoptimalkan kueri, tanpa menggunakan variabel atau prosedur tersimpan, cukup dengan mengganti IN
dengan bergabung, jadi:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
Kecuali Anda tidak keberatan mendapatkan kembali setiap bidang dari kedua tabel, Anda perlu menghitung bidang yang Anda inginkan di SELECT
ayat; tableA.*
, misalnya, akan menimbulkan kesalahan sintaks.