¿Cuáles son las ventajas del cierre transitivo de unión explícito en SQL?

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

  •  08-06-2019
  •  | 
  •  

Pregunta

Cuando uno tres o más tablas mediante una columna común, escribo mi consulta de esta manera:

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

Un colega me preguntó recientemente por qué no hice nada explícito. Unirse al cierre transitivo en mis consultas como esta:

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

¿Hay realmente alguna ventaja en esto?¿Seguramente el optimizador puede implicar esto por sí mismo?

editar:Sé que es una sintaxis malvada, pero es un ejemplo rápido y sucio de código heredado legítimo +1 @estu para limpiarlo

¿Fue útil?

Solución

No es necesario hacer esto en los motores de bases de datos actuales, pero hubo un momento en que cosas como esa le darían al optimizador de consultas más pistas sobre posibles rutas de índice y, por lo tanto, resultados más rápidos.

Hoy en día toda esa sintaxis está desapareciendo de todos modos.

Otros consejos

Esta es una sintaxis heredada sucia y malvada.Escribe esto 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

No, esta sintaxis proviene de los días anteriores a que las uniones estuvieran en el idioma.No estoy seguro de los problemas asociados con esto, pero definitivamente hay construcciones de lenguaje que son más compatibles para unir tablas.

Sólo quiero decir que este tipo de unión es obra del diablo.
Solo piensa en ello;las condiciones para unir y filtrar se mezclan en la declaración donde.
¿Qué sucede cuando necesitas unirte en 20 tablas y filtrar por 15 valores?

De nuevo, solo mis $.02

En Microsoft SQL, los planes de consulta para estas dos consultas son idénticos: se ejecutan de la misma manera.

Si lo miras desde un punto de vista matemático, tus ejemplos deberían producir los mismos resultados.

a = b = c

Entonces, su primer ejemplo arrojaría los mismos resultados que el segundo, por lo que no es necesario hacer trabajo adicional.

Esta pregunta es similar a esta aquí con una explicación muy detallada:

Pregunta SQL del artículo de Joel Spolsky

La respuesta corta es que la declaración explícita de la propiedad transitiva puede acelerar la consulta.Esto se debe a que la optimización de consultas no es una tarea trivial y algunos servidores SQL pueden tener problemas con ella.

Sin embargo, esa sintaxis tiene sus usos...Hay ocasiones en las que necesitas unir dos tablas en más de un campo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top