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

Demaciado Tiempo Para Ejecutar Una Consulta De Sql

Estas en el tema de Demaciado Tiempo Para Ejecutar Una Consulta De Sql en el foro de Bases de Datos General en Foros del Web. hola a todos este es el problema: CREE UN STOREPROCEDURE EN SQL Y ESTE ES PARTE DEL CODIGO. EL FUNCIONA BIEN LO QUE SUCEDE ES ...
  #1 (permalink)  
Antiguo 21/07/2005, 13:30
Avatar de lop7  
Fecha de Ingreso: junio-2005
Ubicación: portuguesa (Venezuela)
Mensajes: 187
Antigüedad: 18 años, 11 meses
Puntos: 1
Demaciado Tiempo Para Ejecutar Una Consulta De Sql

hola a todos este es el problema:
CREE UN STOREPROCEDURE EN SQL Y ESTE ES PARTE DEL CODIGO.
EL FUNCIONA BIEN LO QUE SUCEDE ES Q AL EJECUTARSE LA PARTE DE AZUL TARDA (8) OCHO MINUTOS (40)SEGUNDO LA BD ES GRANDE. PERO NO HAY ALGUNA FORMA DE REDUCIR ESTE TIEMPO RESPUESTA.
AGRADECIRIA LA COLABORACION PARA RESOLVER ESTO

create table #tempo(coditem varchar(16),total_pendiente numeric(15,2),cantsalida int)
insert into #tempo select coditem,0,0 from maestroalmacen

update #tempo
set cantsalida=(select cast(sum(isnull(ds.cantentrega,0))/4 as int)
from dsalidaalmacen ds,salidaalmacen s
where ds.nrosalida=s.nrosalida
and ds.coditem=t1.coditem
and fechasalida<=getdate()
and fechasalida>=(GETDATE()-120 )
group by t1.coditem)

from #tempo t1

SALUDOS
  #2 (permalink)  
Antiguo 21/07/2005, 14:34
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Usar subquerys es de la forma más sencilla de hacer un código lento. Es preferible usar JOINs en su lugar... Pero usar producto cartesiano es peor!!, una vez más la solución es usar JOINS. Prueba algo como esto, que soluciona ambos problemas:
Código:
UPDATE T1
SET cantsalida=cast(sum(isnull(ds.cantentrega,0))/4 as int)
FROM #tempo t1
	INNER JOIN dsalidaalmacen ds
		ON ds.coditem=t1.coditem		
	INNER JOIN salidaalmacen s
		ON ds.nrosalida=s.nrosalida
WHERE fechasalida<=getdate()
	and fechasalida>=(GETDATE()-120 )
El Where lo puedes hacer un poco más "estilizado" con algo como:
Código:
WHERE fechasalida BETWEEN getdate() AND DATEADD(Day, -120, getdate())
PD. El código es al vuelo, probablemente tengas que ajustarlo un poco.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche

Última edición por Mithrandir; 22/07/2005 a las 14:50
  #3 (permalink)  
Antiguo 21/07/2005, 15:28
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 23 años, 6 meses
Puntos: 3
Otra forma de optimizar tus consultas es crear o modificar los índices de tus tablas.

Saludos
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #4 (permalink)  
Antiguo 22/07/2005, 11:25
Avatar de lop7  
Fecha de Ingreso: junio-2005
Ubicación: portuguesa (Venezuela)
Mensajes: 187
Antigüedad: 18 años, 11 meses
Puntos: 1
gracias por la colaboracion... ya solucione
pero tenias razon mitrhandir probe lo que me dijiste pero tenia un pequeño problema. anque resolvi de otra manera gracias.
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 18:30.