sql >> Databasteknik >  >> RDS >> Mysql

Left Join överträffar Inner Join?

Om du tror att implementeringen av LEFT JOIN är INNER JOIN + mer arbete, då är detta resultat förvirrande. Vad händer om implementeringen av INNER JOIN är (LEFT JOIN + filtrering)? Ah, det är klart nu.

I frågeplanerna är den enda skillnaden denna:users... extra:using where . Det betyder filtrering. Det finns ett extra filtreringssteg i frågan med den inre kopplingen.

Detta är en annan typ av filtrering än vad som vanligtvis används i en where-klausul. Det är enkelt att skapa ett index på A för att stödja denna filtreringsåtgärd.

SELECT *
FROM A
WHERE A.ID = 3

Tänk på den här frågan:

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

Denna fråga motsvarar inre koppling. Det finns inget index på B som hjälper den filtreringsåtgärden. Anledningen är att where-klausulen anger ett villkor för resultatet av sammanfogningen, istället för ett villkor för B.



  1. Importera .csv med tidsstämpelkolumn (dd.mm.åååå hh.mm.ss) med psql \copy

  2. Skapa en ny Ruby on Rails-applikation med MySQL istället för SQLite

  3. Har problem med UnixODBC, FreeTDS och PyODBC

  4. Ladda upp bild till servern och lagra bildsökvägen i mysql-databasen