Започвайки от определен брой записи, IN предикат над SELECT става по-бързо от това при списък с константи.
Вижте тази статия в моя блог за сравнение на производителността:
Ако колоната, използвана в заявката в IN клаузата е индексирана, както следва:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, тогава тази заявка просто е оптимизирана до EXISTS (който използва само един запис за всеки запис от table1 )
За съжаление, MySQL не може да направи HASH SEMI JOIN или MERGE SEMI JOIN които са още по-ефективни (особено ако и двете колони са индексирани).