Mysql
 sql >> Database >  >> RDS >> Mysql

Left Join supera Inner Join?

Se pensi che l'implementazione di LEFT JOIN sia INNER JOIN + più lavoro, allora questo risultato è fonte di confusione. Cosa succede se l'implementazione di INNER JOIN è (LEFT JOIN + filtro)? Ah, ora è chiaro.

Nei piani di query, l'unica differenza è questa:users... extra:using where . Questo significa filtrare. C'è un passo di filtraggio aggiuntivo nella query con inner join.

Si tratta di un tipo di filtro diverso da quello normalmente utilizzato in una clausola where. È semplice creare un indice su A per supportare questa azione di filtro.

SELECT *
FROM A
WHERE A.ID = 3

Considera questa domanda:

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

Questa query equivale a inner join. Non vi è alcun indice su B che aiuterà quell'azione di filtraggio. Il motivo è che la clausola where sta affermando una condizione sul risultato del join, invece di una condizione su B.