optimizar consulta

08/09/2004 - 03:40 por Fernando | Informe spam
Hola grupo, la pregunta es la siguiente:
Consulta 1:
Select cli.codcli, cli.direccion, sum(fact.importe) as importe, fact.fecha
from clientes cli
inner join facturas fact on fact.codcli = cli.codcli
where fact.fecha > '20040901'
and cli.activo = 1
group by cli.codcli, cli.direccion, fact.fecha


Consulta 2 :
Select cli.codcli, cli.direccion, (Select sum(importe) from facturas where
facturas.codcli = cli.codcli) as importe,
(Select fecha from facturas where facturas.codcli = cli.codcli) as fecha
from clientes cli
where fact.fecha > '20040901'
group by cli.codcli, cli.direccion
having ((select activo from activos where activo = cli.activo ) = 1)

Estas consultas arrojan el mismo resulta ? Cual de ellas tiene mejor
performance ?
Es mejor utilizar los join o los Select en las subconsultas ?

Gracias de antemano
Saludos
Fernando
 

Leer las respuestas

#1 MAXI
08/09/2004 - 03:46 | Informe spam
Fernando, de esas 2 consultas la numero uno sera mucho mas optima :-), el
motivo es que el tipo de subconsulta que estas usando (a nivel campo) se
esta ejecutando por cada registro de la tabla, si esa tabla llegara a tener
muchos registros la performance se caera :(, sin dudas que en tu caso en
particular usaria la primera, hay veces donde usar subconsultas soluciona
problemas, quizas para evitar algo peor aun llamado Cursores o Tabla
Temporales, pero te repito, en tu caso no tiene ningun sentido

Un abrazo




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Fernando" escribió en el mensaje
news:
Hola grupo, la pregunta es la siguiente:
Consulta 1:
Select cli.codcli, cli.direccion, sum(fact.importe) as importe, fact.fecha
from clientes cli
inner join facturas fact on fact.codcli = cli.codcli
where fact.fecha > '20040901'
and cli.activo = 1
group by cli.codcli, cli.direccion, fact.fecha


Consulta 2 :
Select cli.codcli, cli.direccion, (Select sum(importe) from facturas


where
facturas.codcli = cli.codcli) as importe,
(Select fecha from facturas where facturas.codcli = cli.codcli) as fecha
from clientes cli
where fact.fecha > '20040901'
group by cli.codcli, cli.direccion
having ((select activo from activos where activo = cli.activo ) = 1)

Estas consultas arrojan el mismo resulta ? Cual de ellas tiene mejor
performance ?
Es mejor utilizar los join o los Select en las subconsultas ?

Gracias de antemano
Saludos
Fernando


Preguntas similares