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