A partir de um certo número de registros, o
IN predicado sobre um SELECT torna-se mais rápido do que em uma lista de constantes. Veja este artigo no meu blog para comparação de desempenho:
Se a coluna usada na consulta no
IN cláusula é indexada, assim:SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
, essa consulta será otimizada apenas para um
EXISTS (que usa apenas uma entrada para cada registro de table1 ) Infelizmente,
MySQL não é capaz de fazer HASH SEMI JOIN ou MERGE SEMI JOIN que são ainda mais eficientes (especialmente se ambas as colunas forem indexadas).