sql >> Database >  >> RDS >> Mysql

Left Join presteert beter dan Inner Join?

Als je denkt dat de implementatie van LEFT JOIN INNER JOIN + meer werk is, dan is dit resultaat verwarrend. Wat als de implementatie van INNER JOIN is (LEFT JOIN + filtering)? Ah, het is nu duidelijk.

In de queryplannen is het enige verschil dit:users... extra:using where . Dit betekent filteren. Er is een extra filterstap in de query met de inner join.

Dit is een ander soort filtering dan doorgaans wordt gebruikt in een waar-clausule. Het is eenvoudig om een ​​index op A te maken om deze filteractie te ondersteunen.

SELECT *
FROM A
WHERE A.ID = 3

Overweeg deze vraag:

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

Deze query is gelijk aan inner join. Er is geen index op B die die filteractie zal helpen. De reden is dat de where-clausule een voorwaarde op het resultaat van de join vermeldt, in plaats van een voorwaarde op B.



  1. Hoe variabele declareren en gebruiken in hetzelfde Oracle SQL-script?

  2. Wat doen aanhalingstekens rond de tabelnaam precies?

  3. Innerlijke join vs waar

  4. Hoe maak ik een Oracle-tabel met geneste tabellen met objecttypen?