Utgående från ett visst antal poster, IN predikat över en SELECT blir snabbare än så över en lista med konstanter.
Se den här artikeln i min blogg för jämförelse av prestanda:
Om kolumnen som används i frågan i IN sats indexeras, så här:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, då är den här frågan bara optimerad till en EXISTS (som använder endast en post för varje post från table1 )
Tyvärr, MySQL är inte kapabel att göra HASH SEMI JOIN eller MERGE SEMI JOIN som är ännu mer effektiva (särskilt om båda kolumnerna är indexerade).