sql >> Base de Datos >  >> RDS >> Mysql

Rendimiento del operador MySQL IN en (¿gran?) Número de valores

En términos generales, si el IN list se vuelve demasiado grande (para algún valor mal definido de 'demasiado grande' que generalmente está en la región de 100 o menos), se vuelve más eficiente usar una unión, creando una tabla temporal si es necesario para contener los números.

Si los números son un conjunto denso (sin espacios, como sugieren los datos de muestra), entonces puede hacerlo aún mejor con WHERE id BETWEEN 300 AND 3000 .

Sin embargo, presumiblemente hay lagunas en el conjunto, momento en el que puede ser mejor ir con la lista de valores válidos después de todo (a menos que las lagunas sean relativamente pocas, en cuyo caso podría usar:

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

O lo que sean los huecos.