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.