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

No mysql, qual sql de junção interna é mais eficaz e melhor?


Todos esses são funcionalmente equivalentes. Mesmo a separação entre a cláusula WHERE e a condição JOIN não alterará os resultados ao trabalhar inteiramente com junções INNER (pode ser importante com junções OUTER). Além disso, todos eles devem funcionar exatamente no mesmo plano de consulta (diferença de desempenho efetivamente zero). A ordem em que você inclui os itens não importa . O mecanismo de consulta é livre para otimizar conforme achar melhor dentro da especificação funcional da consulta. Mesmo quando você identifica um comportamento específico em relação à ordem, não deve contar com isso. A especificação permite que o patch de amanhã mude o comportamento de hoje nesta área. Lembre-se:o objetivo principal do SQL é ser baseado em conjuntos e declarativo :você diz ao banco de dados o que você quer fazer, não como você quer que ele faça isso.

Agora que a correção e o desempenho estão fora do caminho, vamos às questões de estilo:coisas como produtividade do programador e legibilidade/manutenção do código. A esse respeito, a opção nº 4 nessa lista é de longe a melhor escolha, com o número 3 a seguir, especialmente quando você começa a entrar em consultas mais complicadas. Só não use o A,B sintaxe mais; está obsoleto desde a versão de 1992 do padrão SQL. Sempre escreva o INNER JOIN completo (ou LEFT JOIN /RIGHT JOIN /CROSS JOIN etc).

Dito tudo isso, embora a ordem não importe (ou, pelo menos, deva) para o desempenho, acho útil quando estou escrevendo SQL usar uma convenção em minha abordagem que dita a ordem. Isso me ajuda a identificar erros ou suposições falsas posteriormente ao depurar e solucionar problemas. Este guia geral que tento seguir é se comportar como se a ordem importasse e, com isso em mente, tente manter o conjunto de memória de trabalho necessário ao banco de dados para atender à consulta o menor possível pelo maior tempo possível:comece com as tabelas menores primeiro e depois junte-se às maiores; ao considerar o tamanho da tabela, leve em consideração as condições na cláusula WHERE que correspondem a um índice; prefira as junções internas antes das externas quando tiver a opção; liste as condições de junção para favorecer os índices (especialmente chaves primárias/em cluster) primeiro e outras condições na junção em segundo lugar.