In MySQL is het doen van een subquery als deze een "gecorreleerde query". Dit betekent dat de resultaten van de buitenste SELECT
afhankelijk van het resultaat van de innerlijke SELECT
. Het resultaat is dat je innerlijke query eenmaal per rij wordt uitgevoerd, wat erg traag is.
U moet deze query refactoren; of je twee keer meedoet of twee zoekopdrachten gebruikt, is meestal niet relevant. Twee keer meedoen geeft je:
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', ...)
Zie voor meer informatie de MySQL-handleiding over subquery's converteren naar JOIN's .
Tip:EXPLAIN SELECT
zal u laten zien hoe de optimizer van plan is om uw vraag te behandelen. Als u DEPENDENT SUBQUERY
. ziet je moet refactoren, deze zijn mega-traag.