Di MySQL, melakukan subquery seperti ini adalah "kueri berkorelasi". Ini berarti bahwa hasil luar SELECT
tergantung pada hasil SELECT
inner bagian dalam . Hasilnya adalah kueri batin Anda dieksekusi sekali per baris, yang sangat lambat.
Anda harus memfaktorkan ulang kueri ini; apakah Anda bergabung dua kali atau menggunakan dua kueri sebagian besar tidak relevan. Bergabung dua kali akan memberi Anda:
SELECT something
FROM posts
INNER JOIN tag_map ON tag_map.id = posts.id
INNER JOIN tags ON tags.tag_id = tag_map.tag_id
WHERE tags.tag IN ('tag1', ...)
Untuk informasi lebih lanjut, lihat manual MySQL di mengonversi subkueri menjadi GABUNG .
Tip:EXPLAIN SELECT
akan menunjukkan kepada Anda bagaimana pengoptimal berencana menangani kueri Anda. Jika Anda melihat DEPENDENT SUBQUERY
Anda harus memfaktorkan ulang, ini sangat lambat.