Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Left Join übertrifft Inner Join?

Wenn Sie denken, dass die Implementierung von LEFT JOIN INNER JOIN + mehr Arbeit ist, dann ist dieses Ergebnis verwirrend. Was ist, wenn die Implementierung von INNER JOIN (LEFT JOIN + Filterung) ist? Ah, jetzt ist es klar.

In den Abfrageplänen besteht der einzige Unterschied darin:users... extra:using where . Das bedeutet filtern. Es gibt einen zusätzlichen Filterschritt in der Abfrage mit dem inneren Join.

Dies ist eine andere Art der Filterung, als sie normalerweise in einer where-Klausel verwendet wird. Es ist einfach, einen Index für A zu erstellen, um diese Filteraktion zu unterstützen.

SELECT *
FROM A
WHERE A.ID = 3

Betrachten Sie diese Abfrage:

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

Diese Abfrage entspricht dem Inner Join. Es gibt keinen Index auf B, der diese Filteraktion unterstützt. Der Grund dafür ist, dass die where-Klausel eine Bedingung für das Ergebnis des Joins anstelle einer Bedingung für B angibt.