Mysql
 sql >> Base de données >  >> RDS >> Mysql

Performances de l'opérateur MySQL IN sur un (grand ?) nombre de valeurs

De manière générale, si le IN devient trop grande (pour une valeur mal définie de 'trop grande' qui est généralement de l'ordre de 100 ou moins), il devient plus efficace d'utiliser une jointure, créant une table temporaire si nécessaire pour contenir les nombres.

Si les nombres sont un ensemble dense (pas d'écarts - ce que les exemples de données suggèrent), alors vous pouvez faire encore mieux avec WHERE id BETWEEN 300 AND 3000 .

Cependant, il y a probablement des lacunes dans l'ensemble, auquel cas il peut être préférable d'utiliser la liste des valeurs valides après tout (à moins que les lacunes soient relativement peu nombreuses, auquel cas vous pouvez utiliser :

WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836

Ou quelles que soient les lacunes.