V MySQL je provedení podobného poddotazu „korelovaným dotazem“. To znamená, že výsledky vnějšího SELECT
závisí na výsledku vnitřního SELECT
. Výsledkem je, že váš vnitřní dotaz se provede jednou na řádek, což je velmi pomalé.
Tento dotaz byste měli refaktorovat; zda se připojíte dvakrát nebo použijete dva dotazy, je většinou irelevantní. Pokud se připojíte dvakrát, získáte:
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', ...)
Další informace naleznete v příručce MySQL o převodu poddotazů na JOIN .
Tip:EXPLAIN SELECT
vám ukáže, jak optimalizátor plánuje zpracování vašeho dotazu. Pokud vidíte DEPENDENT SUBQUERY
měli byste refaktorovat, jsou megapomalé.