No hay un tipo de unión "mejor" o "peor". Tienen un significado diferente y deben usarse dependiendo de ello.
En su caso, es probable que no tiene empleados sin work_log (no hay filas de esa tabla), por lo que LEFT JOIN
y JOIN
será equivalente en los resultados. Sin embargo, si tuviera tal cosa (un nuevo empleado sin registro de trabajo registrado), un usuario omitiría a JOIN
ese empleado, mientras que una combinación izquierda (cuya primera tabla es empleados) los mostraría a todos, y nulos en los campos de work_log si hubiera No son partidos.
Nuevamente, el rendimiento es una cosa secundaria para la corrección de la consulta. Algunas personas dicen que no deberías usar LEFT JOIN
s. Es cierto que una IZQUIERDA IZQUIERDA obliga al optimizador a ejecutar la consulta en un orden particular, evitando algunas optimizaciones (reordenamiento de tablas) en algunos casos. Aquí hay un ejemplo . Pero no debe elegir uno sobre el otro si se sacrifica la corrección / significado, ya que una UNIÓN INTERNA no es inherentemente peor. El resto de las optimizaciones habituales se aplican como de costumbre.
En resumen, no lo use LEFT JOIN
si realmente quiere decir INNER JOIN
.
En MySQL CROSS JOIN
, INNER JOIN
y JOIN
son lo mismo. En el estándar, y semánticamente, a CROSS JOIN
es un INNER JOIN
sin ON
cláusula, por lo que obtiene todas las combinaciones de filas entre tablas.
Tienes ejemplos de todos los tipos semánticos de unión en Wikipedia . En la práctica, en MySQL, tendemos a escribir solo JOIN
y LEFT JOIN
.
JOIN
no calificada implicaINNER JOIN
¿Qué combinación tiene mejor rendimiento si todos proporcionan el mismo resultado?
Además de la respuesta anterior, por lo que sé, MySQL está optimizado para tener el mismo rendimiento.
Con buenos índices, por ejemplo, la cláusula
JOIN
vsLEFT JOIN
+WHERE
para filtrar será lo mismo. La optimización frente a la lectura humana tiene sentido en consultas grandes con muchas combinaciones.Usar buenos índices y caché es más importante.
Puede leer una buena explicación del proceso de optimización aquí:
El proceso de optimización de consultas : una consulta a menudo se puede ejecutar de muchas maneras diferentes y producir el mismo resultado. El trabajo del optimizador es encontrar la mejor opción.
fuente