Počínaje určitým počtem záznamů IN predikát nad SELECT se stává rychlejší než to nad seznamem konstant.
Porovnání výkonu naleznete v tomto článku na mém blogu:
Pokud je sloupec použitý v dotazu v IN klauzule je indexována takto:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, pak je tento dotaz pouze optimalizován na EXISTS (který používá pouze jeden záznam pro každý záznam z table1 )
Bohužel MySQL není schopen provést HASH SEMI JOIN nebo MERGE SEMI JOIN které jsou ještě efektivnější (zejména pokud jsou oba sloupce indexovány).