En respuesta a this SQL question, me he encontrado con una declaración que fija el valor IN()
operador es mucho más lento que INNER JOIN
con el mismo contenido, hasta el punto de que es mejor crear una tabla temporal para los valores y UNIRSE a ellos. ¿Es cierto (en general, con MySQL, cualquier otro motor SQL) y, en caso afirmativo, por qué? Intuitivamente, IN
debería ser más rápido: está comparando la posible coincidencia con un conjunto fijo de valores, que ya están en la memoria y en el formato necesario, mientras que con JOIN debería consultar los índices, posiblemente cargar datos desde el disco, y realice otras operaciones que pueden no ser necesarias con IN. ¿Me estoy perdiendo algo importante?SQL-valor fijado en() vs. INNER JOIN rendimiento
Tenga en cuenta que a diferencia de this question y sus muchos duplicados, estoy hablando de IN()
que tiene un conjunto de valores fijo, no subconsulta.
Esto es definitivamente algo que varía entre plataformas DB. En mi experiencia con SQL Server y PostgreSQL, las cláusulas 'IN' en constantes contra índices son muy rápidas. – Pointy
La pregunta a la que se vinculó es SQL Server. No estoy seguro si ya está enterado, pero MySQL puede ser bastante catastróficamente malo con [con una consulta secundaria también] (http://stackoverflow.com/questions/3417074/why-would-an-in-condition-be-slower -than-in-sql/3417190 # 3417190) –
@Martin pregunta original (primer enlace) fue sobre MySQL. Conozco los problemas de MySQL con las subconsultas, pero supuse que está bien con las listas constantes, por eso la afirmación en la respuesta de @ DVK me sorprendió. – StasM