Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Desempenho do operador MySQL IN em (grande?) número de valores


De um modo geral, se o IN list fica muito grande (para algum valor mal definido de 'muito grande' que geralmente está na região de 100 ou menor), torna-se mais eficiente usar uma junção, criando uma tabela temporária, se necessário, para armazenar os números.

Se os números forem um conjunto denso (sem lacunas - o que os dados de exemplo sugerem), você poderá fazer ainda melhor com WHERE id BETWEEN 300 AND 3000 .

No entanto, presumivelmente há lacunas no conjunto, e nesse ponto pode ser melhor seguir a lista de valores válidos (a menos que as lacunas sejam relativamente poucas em número, caso em que você pode usar:
WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836

Ou quaisquer que sejam as lacunas.