Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Como evitar Subquerys

Estas en el tema de Como evitar Subquerys en el foro de SQL Server en Foros del Web. Hola amigos que tal? estoy teniendo problemas de rendimiento en unas consultas en las cuales necesito eliminar subquerys dentro de querys y queria saber como ...
  #1 (permalink)  
Antiguo 06/07/2009, 10:17
 
Fecha de Ingreso: agosto-2008
Ubicación: Argentina
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 0
Como evitar Subquerys

Hola amigos que tal? estoy teniendo problemas de rendimiento en unas consultas en las cuales necesito eliminar subquerys dentro de querys y queria saber como solucionar este problema de rendimiento ya que he probado opciones pero no he encontrado la solucion. La cosa es asi tengo una tabla temporal donde guardo info de otras tablas y dentro del select otro select que hace una suma de otra tabla les dejo el select del insert a modo de ejemplo

SELECT @FechaAnt = (SELECT MAX(Fecha) FROM tablatemp1 WHERE datediff(day, Fecha, @Fecha)>0)


SELECT tablatemp1.CodCliente,
@Fecha,
tablatemp1.CodMoneda,
tablatemp1.Saldo +
isnull((select sum(tabla1.Neto)
from tabla1
inner join tabla2
on tabla1.CodTabla1 = tabla2.CodTabla1
where ((datediff(day, coalesce(Tabla2.FechaHasta, @Fecha), @Fecha)=0 and @bFechaHasta = 0) or (datediff(day, coalesce(tabla1.FechaDesde, @Fecha)=0 and @bFechaDesde = -1))
and tabla1.CodCliente = tablatemp1.CodCliente
and tabla1.EsAnulado = 0
and tabla2.CodMoneda = tablatemp1.CodMoneda),0)
FROM tablatemp1
WHERE datediff(day, tablatemp1.Fecha, @FechaAnt) = 0
  #2 (permalink)  
Antiguo 07/07/2009, 07:04
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Como evitar Subquerys

probablemente se optimizaria utilizando join, pero creo la parte mas pesada es que esta haciendo operaciones con todos los registros en su campo fecha..

eso hace bastante pesado el proceso porque se recorre la tabla completa, registro por registro para aplicarle la funcion, y se deja de utilizar los indices..

Lo mejor es hacer rangos del tipo >= y <= para lo de las fechas.

solo que tu consulta esta algo complicada y no me queda claro que es lo que necesitas...

si la explicar mas a detalle seguro podran ayudarte a replantearla..


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 07/07/2009, 08:47
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Como evitar Subquerys

A ver, esto es una idea:
Código sql:
Ver original
  1. SELECT TT.CodCliente,@Fecha,TT.CodMoneda,TT.Saldo+SUM(T1.Neto)
  2. FROM tablatemp1 TT
  3. INNER JOIN tabla1 T1 ON TT.CodCliente = T1.CodCliente
  4. INNER JOIN tabla2 T2 ON T1.CodT1 = T2.CodT1 AND TT.CodMoneda = T2.CodMoneda
  5. WHERE datediff(DAY, TT.Fecha, @FechaAnt) = 0 AND T1.EsAnulado = 0
  6. AND ((datediff(DAY, COALESCE(T2.FechaHasta, @Fecha), @Fecha)=0 AND @bFechaHasta = 0)
  7.     OR (datediff(DAY, COALESCE(T1.FechaDesde, @Fecha)=0 AND @bFechaDesde = -1)))
  8. GROUP BY TT.CodCliente,@Fecha,TT.CodMoneda,TT.Saldo

Algo que noté, fue que te faltaba cerrar un parentesis despues de and @bFechaDesde = -1
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:17.