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).