Mulai dari sejumlah record tertentu, IN
predikat di atas SELECT
menjadi lebih cepat dari itu pada daftar konstanta.
Lihat artikel ini di blog saya untuk perbandingan kinerja:
Jika kolom yang digunakan dalam kueri di IN
klausa diindeks, seperti ini:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, maka kueri ini hanya dioptimalkan ke EXISTS
(yang hanya menggunakan satu entri untuk setiap record dari table1
)
Sayangnya, MySQL
tidak mampu melakukan HASH SEMI JOIN
atau MERGE SEMI JOIN
yang lebih efisien (terutama jika kedua kolom diindeks).