Não existe um tipo de associação "melhor" ou "pior". Eles têm um significado diferente e devem ser usados dependendo dele.
No seu caso, você provavelmente não tem empregados sem work_log (há carreiras em que a tabela), então LEFT JOIN
e JOIN
será equivalente no resultado. No entanto, se você tivesse uma dessas coisas (um novo funcionário sem work_log registrado), um número JOIN
omitido seria esse funcionário, enquanto uma junção esquerda (cuja primeira tabela é funcionários) mostraria todos eles e nulos nos campos de work_log, se houver não são correspondências.
Novamente, o desempenho é uma coisa secundária para consultar a correção. Algumas pessoas dizem que você não deve usar LEFT JOIN
s. É verdade que um LEFT JOIN força o otimizador a executar a consulta em uma ordem específica, impedindo algumas otimizações (reordenação de tabelas) em alguns casos. Aqui está um exemplo . Mas você não deve escolher um sobre o outro se a correção / significado for sacrificado, pois uma INNER JOIN não é inerentemente pior. O restante das otimizações usuais se aplica como de costume.
Em resumo, não use LEFT JOIN
se você realmente quer dizer INNER JOIN
.
No MySQL CROSS JOIN
, INNER JOIN
e JOIN
são os mesmos. No padrão e semântica, a CROSS JOIN
é INNER JOIN
uma ON
cláusula sem , portanto você obtém todas as combinações de linhas entre tabelas.
Você tem exemplos de todos os tipos semânticos de junção na Wikipedia . Na prática, no MySQL, tendemos apenas a escrever JOIN
e LEFT JOIN
.
JOIN
sem ressalvas implicaINNER JOIN
Qual junção tem melhor desempenho se todas elas fornecerem o mesmo resultado?
Além da resposta anterior, pelo que sei, o MySQL é otimizado para ter o mesmo desempenho.
Com bons índices, por exemplo, a cláusula
JOIN
vsLEFT JOIN
+WHERE
para filtrar, será a mesma coisa. Otimização versus leitura humana fazem sentido em consultas grandes com muitas junções.Usar bons índices e cache é mais importante.
Você pode ler uma boa explicação do processo de otimização aqui:
O processo de otimização de consulta : Uma consulta geralmente pode ser executada de várias maneiras diferentes e produzir o mesmo resultado. O trabalho do otimizador é encontrar a melhor opção.
fonte