Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A junção esquerda supera a junção interna?


Se você acha que a implementação de LEFT JOIN é INNER JOIN + mais trabalho, então esse resultado é confuso. E se a implementação do INNER JOIN for (LEFT JOIN + filtragem)? Ah, ficou claro agora.

Nos planos de consulta, a única diferença é esta:users... extra:using where . Isso significa filtrar. Há uma etapa de filtragem extra na consulta com a junção interna.

Este é um tipo diferente de filtragem do que é normalmente usado em uma cláusula where. É simples criar um índice em A para dar suporte a essa ação de filtragem.
SELECT *
FROM A
WHERE A.ID = 3

Considere esta consulta:
SELECT *
FROM A
  LEFT JOIN B
  ON A.ID = B.ID
WHERE B.ID is not null

Essa consulta é equivalente à junção interna. Não há índice em B que ajude nessa ação de filtragem. A razão é que a cláusula where está declarando uma condição no resultado da junção, em vez de uma condição em B.