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