Repetición de condiciones

29/09/2004 - 10:27 por XaviF | Informe spam
Hola!

Supongamos que hacemos una consulta en la que intervienen varias tablas
ligadas por JOINs. Supongamos que todas ellas ligan con una tabla principal.
Supongamos que queremos consultar por la PK de esta tabla principal. Es
cierto que es óptimo incluir en la restricción WHERE las condiciones de la
PK para todas las tablas.

Ejemplo:

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK

es peor que

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK
AND T1.PK = @PK
AND T2.PK = @PK
?

Gracias a todos


Xavi

Preguntas similare

Leer las respuestas

#1 Maxi
29/09/2004 - 15:02 | Informe spam
Hola, peor?? no entiendo porque!! si tienes buenos indices sobre los campos
de los Where no sera tan malo!!

Pero es cierto que si solo buscas por el PK y este ademas es un indice
Cluster sera mucho mas optimo!!

Pero no todo se puede hacer asi, con lo cual lo que debes tener es buenos
indices :-)


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"XaviF" escribió en el mensaje
news:%
Hola!

Supongamos que hacemos una consulta en la que intervienen varias tablas
ligadas por JOINs. Supongamos que todas ellas ligan con una tabla


principal.
Supongamos que queremos consultar por la PK de esta tabla principal. Es
cierto que es óptimo incluir en la restricción WHERE las condiciones de la
PK para todas las tablas.

Ejemplo:

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK

es peor que

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK
AND T1.PK = @PK
AND T2.PK = @PK
?

Gracias a todos


Xavi







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.769 / Virus Database: 516 - Release Date: 24/09/2004
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
29/09/2004 - 15:21 | Informe spam
La mejor forma de averiguarlo es que uses el Query Analizer y analices el
plan de ejecución de cada consulta. Eso te permitirá determinar cuál es la
consulta que te conviene usar.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"XaviF" wrote in message
news:%
Hola!

Supongamos que hacemos una consulta en la que intervienen varias tablas
ligadas por JOINs. Supongamos que todas ellas ligan con una tabla
principal.
Supongamos que queremos consultar por la PK de esta tabla principal. Es
cierto que es óptimo incluir en la restricción WHERE las condiciones de la
PK para todas las tablas.

Ejemplo:

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK

es peor que

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK
AND T1.PK = @PK
AND T2.PK = @PK
?

Gracias a todos


Xavi


Respuesta Responder a este mensaje
#3 Adrian D. Garcia
29/09/2004 - 19:31 | Informe spam
Lo mas probable es que sea exactamente igual.
Lanza los 2 queries en el analizador de consultas con la opcion de ver el
plan de ejecucion y fijate si hay alguna diferencia entre los 2 planes
obtenidos.
Hay que recordar que el motor hace un analisis bastante interesante del
query antes de ejecutarlo normalizandolo por lo cual este tipo de
condiciones no tienen relevancia al momento de la ejecucion.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"XaviF" wrote in message
news:%
Hola!

Supongamos que hacemos una consulta en la que intervienen varias tablas
ligadas por JOINs. Supongamos que todas ellas ligan con una tabla


principal.
Supongamos que queremos consultar por la PK de esta tabla principal. Es
cierto que es óptimo incluir en la restricción WHERE las condiciones de la
PK para todas las tablas.

Ejemplo:

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK

es peor que

SELECT *
FROM TablaPrincipal T
INNER JOIN Tabla1 T1 ON T1.PK = T.PK
INNER JOIN Tabla2 T2 ON T2.PK = T.PK
WHERE T.PK = @PK
AND T1.PK = @PK
AND T2.PK = @PK
?

Gracias a todos


Xavi


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida