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

Left Join superando a Inner Join?

Si cree que la implementación de LEFT JOIN es INNER JOIN + más trabajo, entonces este resultado es confuso. ¿Qué sucede si la implementación de INNER JOIN es (LEFT JOIN + filtrado)? Ah, ahora está claro.

En los planes de consulta, la única diferencia es esta:users... extra:using where . Esto significa filtrado. Hay un paso de filtrado adicional en la consulta con la unión interna.

Este es un tipo de filtrado diferente al que se usa normalmente en una cláusula where. Es simple crear un índice en A para admitir esta acción de filtrado.

SELECT *
FROM A
WHERE A.ID = 3

Considere esta consulta:

SELECT *
FROM A
  LEFT JOIN B
  ON A.ID = B.ID
WHERE B.ID is not null

Esta consulta es equivalente a la unión interna. No hay un índice en B que ayude a esa acción de filtrado. El motivo es que la cláusula where establece una condición sobre el resultado de la combinación, en lugar de una condición sobre B.