Vanaf een bepaald aantal records wordt de IN predikaat boven een SELECT wordt sneller dan dat over een lijst met constanten.
Zie dit artikel in mijn blog voor prestatievergelijking:
Als de kolom die in de zoekopdracht wordt gebruikt in de IN clausule is als volgt geïndexeerd:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, dan is deze zoekopdracht gewoon geoptimaliseerd tot een EXISTS (die slechts één invoer gebruikt voor elk record uit table1 )
Helaas, MySQL kan HASH SEMI JOIN niet doen of MERGE SEMI JOIN die nog efficiënter zijn (vooral als beide kolommen geïndexeerd zijn).