Quais são as vantagens do fechamento transitivo de junção explícito em SQL?

StackOverflow https://stackoverflow.com/questions/11028

  •  08-06-2019
  •  | 
  •  

Pergunta

Ao unir três ou mais tabelas por uma coluna comum, escreveria minha consulta assim:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id

um colega recentemente me perguntou por que não fiz perguntas explícitas Junte-se ao fechamento transitivo em minhas consultas como esta:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id
AND    c.id = a.id

há realmente alguma vantagem nisso?Certamente o otimizador pode implicar isso por si mesmo?

editar:Eu sei que é uma sintaxe maligna, mas é um exemplo rápido e sujo de código legado legítimo +1 @Stu para limpá-lo

Foi útil?

Solução

Você não precisa fazer isso nos mecanismos de banco de dados atuais, mas houve um tempo em que coisas assim dariam ao otimizador de consulta mais dicas sobre possíveis caminhos de índice e, portanto, resultados mais rápidos.

Hoje em dia, toda a sintaxe está desaparecendo de qualquer maneira.

Outras dicas

Esta é uma sintaxe legada suja e maligna.Você escreve isso como

Select
  *  -- Oh, and don't ever use *, either
From
  A 
  Inner Join B On A.ID = B.ID
  Inner Join C On B.ID = C.ID

Não, esta sintaxe vem de antes das junções estarem na linguagem.Não tenho certeza dos problemas associados a ele, mas definitivamente existem construções de linguagem que são mais suportadas para unir tabelas.

Só quero dizer que esse tipo de união é obra do diabo.
Basta pensar nisso;as condições de união e filtragem são misturadas na instrução where.
O que acontece quando você precisa unir 20 tabelas e filtrar 15 valores?

Novamente, apenas meus $ 0,02

No Microsoft SQL, os planos de consulta para essas duas consultas são idênticos – eles são executados da mesma maneira.

Se você olhar de um ponto de vista matemático, seus exemplos deverão produzir os mesmos resultados.

uma = b = c

Portanto, seu primeiro exemplo produziria os mesmos resultados que o segundo, portanto, não há necessidade de fazer trabalho extra.

Esta questão é semelhante a esta aqui com uma explicação muito aprofundada:

Pergunta SQL do artigo de Joel Spolsky

A resposta curta é que a declaração explícita da propriedade transitiva pode acelerar a consulta.Isso ocorre porque a otimização de consultas não é uma tarefa trivial e alguns servidores SQL podem ter problemas com isso.

Essa sintaxe tem sua utilidade ...há momentos em que você precisa unir duas tabelas em mais de um campo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top