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

¿Hay algún problema con las uniones que no usan la palabra clave JOIN en SQL o MySQL?

Filtrado de uniones únicamente usando WHERE puede ser extremadamente ineficiente en algunos escenarios comunes. Por ejemplo:

SELECT * FROM people p, companies c 
    WHERE p.companyID = c.id AND p.firstName = 'Daniel'

La mayoría de las bases de datos ejecutarán esta consulta literalmente, tomando primero el producto cartesiano de las people y companies tablas y entonces filtrado por aquellos que tienen companyID coincidentes y id los campos. Si bien el producto sin restricciones no existe en ningún otro lugar que no sea en la memoria y solo por un momento, su cálculo lleva algún tiempo.

Un mejor enfoque es agrupar las restricciones con JOIN s donde sea relevante. Esto no solo es subjetivamente más fácil de leer, sino también mucho más eficiente. Así:

SELECT * FROM people p JOIN companies c ON p.companyID = c.id
    WHERE p.firstName = 'Daniel'

Es un poco más largo, pero la base de datos puede ver el ON cláusula y utilícela para calcular el JOIN totalmente restringido directamente, en lugar de empezar con todo y luego limitando hacia abajo. Esto es más rápido de calcular (especialmente con grandes conjuntos de datos y/o uniones de muchas tablas) y requiere menos memoria.

Cambio cada consulta que veo que usa la "coma JOIN " sintaxis. En mi opinión, el único propósito de su existencia es la concisión. Teniendo en cuenta el impacto en el rendimiento, no creo que esta sea una razón de peso.