Consulta de rendimiento

17/06/2005 - 16:48 por Oscar D | Informe spam
Buen Dia.

Tengo una duda, cual es la mejor practica al hacer una consulta de este
tipo:

1.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave INNER JOIN tabla_3 c
ON a.clave = c.Clave
WHERE
b.condicion = 1
AND a.condicion = 0

Ó

2.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
INNER JOIN tabla_3 c ON a.clave = c.Clave

O es lo miemo hacerlas en cualquier forma.

Saludos.

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
17/06/2005 - 17:03 | Informe spam
Hola,

Personalmente nunca utilizo consultas donde en la JOIN introduzco
condiciones que no sean específicas y necesarias para la JOIN, creo que es
mucho más claro poner en la JOIN las condiciones de JOIN, y el resto en
WHERE.

En cuanto al rendimiento, habría que ver los planes de ejecución, ya que
nunca he hecho estas pruebas, pero me atrevería a decir que no va a haber
diferencias prácticamente.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Oscar D" escribió en el mensaje
news:%
Buen Dia.

Tengo una duda, cual es la mejor practica al hacer una consulta de este
tipo:

1.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave INNER JOIN tabla_3 c
ON a.clave = c.Clave
WHERE
b.condicion = 1
AND a.condicion = 0

Ó

2.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
INNER JOIN tabla_3 c ON a.clave = c.Clave

O es lo miemo hacerlas en cualquier forma.

Saludos.







Respuesta Responder a este mensaje
#2 Alejandro Mesa
17/06/2005 - 18:30 | Informe spam
Oscar,

Cuando usas "inner join", entonces no hay diferencia entre poner el filtro
en el join o en la clausula "where". Pero coincido con Salvador, la
legibilidad de la sentencia es mas clara cuando en el join solo usamos las
condiciones de relacion. En casos de "outer joins" la cosa cambia, pues el
resultado puede ser completamente diferente.


AMB

"Oscar D" wrote:

Buen Dia.

Tengo una duda, cual es la mejor practica al hacer una consulta de este
tipo:

1.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave INNER JOIN tabla_3 c
ON a.clave = c.Clave
WHERE
b.condicion = 1
AND a.condicion = 0

Ó

2.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
INNER JOIN tabla_3 c ON a.clave = c.Clave

O es lo miemo hacerlas en cualquier forma.

Saludos.








Respuesta Responder a este mensaje
#3 Maxi
18/06/2005 - 16:43 | Informe spam
Hola, puede existir una diferencia si se hacen consultas derivadas, en lo
cual dentro del join poner realmente lo que necesito y no todo para luego
hacer el filtro, la union en estos casos es mucho mas liviana y por mi
experiencia en muchos querys a mejorado la performance mucho


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
Oscar,

Cuando usas "inner join", entonces no hay diferencia entre poner el filtro
en el join o en la clausula "where". Pero coincido con Salvador, la
legibilidad de la sentencia es mas clara cuando en el join solo usamos las
condiciones de relacion. En casos de "outer joins" la cosa cambia, pues el
resultado puede ser completamente diferente.


AMB

"Oscar D" wrote:

Buen Dia.

Tengo una duda, cual es la mejor practica al hacer una consulta de este
tipo:

1.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave INNER JOIN tabla_3 c
ON a.clave = c.Clave
WHERE
b.condicion = 1
AND a.condicion = 0

Ó

2.-
DELETE tabla1
FROM Tabla_1 a Inner Join tabla_2 b
ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
INNER JOIN tabla_3 c ON a.clave = c.Clave

O es lo miemo hacerlas en cualquier forma.

Saludos.








Respuesta Responder a este mensaje
#4 Alejandro Mesa
20/06/2005 - 14:24 | Informe spam
Hola Maxi,

Te agredecieria mucho si nos pudieras mostrar un ejemplo.

Gracias por adelantado,

Alejandro Mesa

"Maxi" wrote:

Hola, puede existir una diferencia si se hacen consultas derivadas, en lo
cual dentro del join poner realmente lo que necesito y no todo para luego
hacer el filtro, la union en estos casos es mucho mas liviana y por mi
experiencia en muchos querys a mejorado la performance mucho


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
> Oscar,
>
> Cuando usas "inner join", entonces no hay diferencia entre poner el filtro
> en el join o en la clausula "where". Pero coincido con Salvador, la
> legibilidad de la sentencia es mas clara cuando en el join solo usamos las
> condiciones de relacion. En casos de "outer joins" la cosa cambia, pues el
> resultado puede ser completamente diferente.
>
>
> AMB
>
> "Oscar D" wrote:
>
>> Buen Dia.
>>
>> Tengo una duda, cual es la mejor practica al hacer una consulta de este
>> tipo:
>>
>> 1.-
>> DELETE tabla1
>> FROM Tabla_1 a Inner Join tabla_2 b
>> ON a.clave = b.Clave INNER JOIN tabla_3 c
>> ON a.clave = c.Clave
>> WHERE
>> b.condicion = 1
>> AND a.condicion = 0
>>
>> Ó
>>
>> 2.-
>> DELETE tabla1
>> FROM Tabla_1 a Inner Join tabla_2 b
>> ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
>> INNER JOIN tabla_3 c ON a.clave = c.Clave
>>
>> O es lo miemo hacerlas en cualquier forma.
>>
>> Saludos.
>>
>>
>>
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
#5 Maxi
20/06/2005 - 16:47 | Informe spam
Hola Ale, en muchos casos hacer esto puede significar una diferencia enorme:

Select t1.campo, t2.campo from (select campos from t1 where loqueseea) t1
left join
(select campo2 from t2 where loquesea) t2 on
t1.id = t2.id

Esto acelera mucho la cosa cuando las tablas son grandes, por ej, en algunas
consultas que he realizado al ERP que tenemos esto de esta manera puede
hacer que la consulta dure 2 segundos y si la hacemos fuera y luego el where
puede durar 4 o 6 segundos


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
Hola Maxi,

Te agredecieria mucho si nos pudieras mostrar un ejemplo.

Gracias por adelantado,

Alejandro Mesa

"Maxi" wrote:

Hola, puede existir una diferencia si se hacen consultas derivadas, en lo
cual dentro del join poner realmente lo que necesito y no todo para luego
hacer el filtro, la union en estos casos es mucho mas liviana y por mi
experiencia en muchos querys a mejorado la performance mucho


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alejandro Mesa" escribió en el
mensaje news:
> Oscar,
>
> Cuando usas "inner join", entonces no hay diferencia entre poner el
> filtro
> en el join o en la clausula "where". Pero coincido con Salvador, la
> legibilidad de la sentencia es mas clara cuando en el join solo usamos
> las
> condiciones de relacion. En casos de "outer joins" la cosa cambia, pues
> el
> resultado puede ser completamente diferente.
>
>
> AMB
>
> "Oscar D" wrote:
>
>> Buen Dia.
>>
>> Tengo una duda, cual es la mejor practica al hacer una consulta de
>> este
>> tipo:
>>
>> 1.-
>> DELETE tabla1
>> FROM Tabla_1 a Inner Join tabla_2 b
>> ON a.clave = b.Clave INNER JOIN tabla_3 c
>> ON a.clave = c.Clave
>> WHERE
>> b.condicion = 1
>> AND a.condicion = 0
>>
>> Ó
>>
>> 2.-
>> DELETE tabla1
>> FROM Tabla_1 a Inner Join tabla_2 b
>> ON a.clave = b.Clave AND b.condicion = 1 AND a.condicion = 0
>> INNER JOIN tabla_3 c ON a.clave = c.Clave
>>
>> O es lo miemo hacerlas en cualquier forma.
>>
>> Saludos.
>>
>>
>>
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida