Zaczynając od określonej liczby rekordów, IN
orzeczenie nad SELECT
staje się szybszy niż na liście stałych.
Zobacz ten artykuł na moim blogu, aby porównać wydajność:
Jeśli kolumna użyta w zapytaniu w IN
klauzula jest indeksowana w następujący sposób:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, to zapytanie jest po prostu zoptymalizowane do EXISTS
(który używa tylko jednego wpisu dla każdego rekordu z table1
)
Niestety, MySQL
nie jest w stanie wykonać HASH SEMI JOIN
lub MERGE SEMI JOIN
które są jeszcze bardziej wydajne (zwłaszcza jeśli obie kolumny są indeksowane).