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

Consulta en SQL server Tarda demasiado

Estas en el tema de Consulta en SQL server Tarda demasiado en el foro de SQL Server en Foros del Web. Hola gente recientemente estoy ocupando un procedimiento almacenado para traer datos de venta en la empresa en que trabajo, el procedimiento extrae el total de ...
  #1 (permalink)  
Antiguo 06/07/2016, 10:14
 
Fecha de Ingreso: febrero-2016
Mensajes: 4
Antigüedad: 8 años, 8 meses
Puntos: 0
Consulta en SQL server Tarda demasiado

Hola gente recientemente estoy ocupando un procedimiento almacenado para traer datos de venta en la empresa en que trabajo, el procedimiento extrae el total de las ventas de un medicamento en los ultimos 12 meses (julio año pasado a julio año actual) el problema es que se tarda demasiado y el servidor se queda sin recursos. pongo parte de mi consulta (son 500 lineas pero pondre parte), la base de datos esta en sqlserver 2000 ya q es un sistema viejo

Código SQL:
Ver original
  1. DECLARE @FECHAX DATETIME
  2. SET @FECHAX=GETDATE()
  3. SELECT  TOP 1 T0.ARTICULO, T0.DESCRIPCION, T0.Clasificacion6 AS PRESENTACION, T0.Clasificacion2 AS LABORATORIO,
  4. /**************************BLOQUE**************************/
  5. ISNULL((
  6. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  7. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  8.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  9.                                             AND T1.RUTA='F02'
  10. ),0) AS IPRIVADA1,
  11. ISNULL((
  12. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  13. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  14.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  15.                                             AND T1.RUTA<>'F02'AND T1.RUTA<>'F12'
  16. ),0) AS FPRIVADA1,
  17. ISNULL((
  18. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  19. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  20.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  21.                                             AND T1.RUTA='F12' AND [Cod. Cliente]<>'02094' AND [Cod. Cliente]<>'03165'
  22. ),0) AS FPUBLICA1,
  23. /**********SUMA DE TOTAL************/
  24. ISNULL((
  25. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  26. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  27.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  28.                                             AND T1.RUTA='F02'
  29. ),0)+
  30. ISNULL((
  31. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  32. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  33.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  34.                                             AND T1.RUTA<>'F02'AND T1.RUTA<>'F12'
  35. ),0)+ ISNULL((
  36. SELECT SUM(T1.CANTIDAD) FROM ALDER_GGG_VtasTotal_UNION T1
  37. WHERE T1.DIA BETWEEN (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 13, @FECHAX))-15),DATEADD(MONTH, - 13, @FECHAX))) AND
  38.                                          (SELECT DATEADD(DAY, -(SELECT DAY(DATEADD(MONTH, - 12, @FECHAX))-15),DATEADD(MONTH, - 12, @FECHAX))) AND T1.ARTICULO=@ARTICULO
  39.                                             AND T1.RUTA='F12' AND [Cod. Cliente]<>'02094' AND [Cod. Cliente]<>'03165'
  40. ),0) AS TOTAL1,
  41. /********************************************************************************/


estoy utilizando subconsultas en donde hago betwen obteniendo la fecha del sistema, cada vez que lo ejecuto tarda 7.456 seg aproximadamente, el problema es que son 1000 articulos = 7456 seg

Alguna sugerencia para optimizarla??

Última edición por gnzsoloyo; 07/07/2016 a las 05:06 Razón: USAR HIGHLIGHTS, POR FAVOR.
  #2 (permalink)  
Antiguo 07/07/2016, 02:32
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Consulta en SQL server Tarda demasiado

No especificas si las subconsultas y sus where son siempre los mismos, si es así podías ejecutarlas primero y guardar el dato en variables. Si las subconsultas son siempre las mismas pero varían los filtros puedes crear una funcion escalar y que te devuelta el dato, algo así ISNULL( fn_escalar(parametros),0). Aunque no estoy seguro si esto es mas óptimo.
  #3 (permalink)  
Antiguo 07/07/2016, 12:19
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 20 años, 2 meses
Puntos: 6
Respuesta: Consulta en SQL server Tarda demasiado

Puedes indicar el número de registros por cada tabla que esta involurada en tu consulta?
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #4 (permalink)  
Antiguo 08/07/2016, 10:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Consulta en SQL server Tarda demasiado

¿Y existen INDICES en las tablas?, ¿Cuales son?
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 09/07/2016, 13:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulta en SQL server Tarda demasiado

y cual es el plan de ejecucion de tu consulta??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: ayuda-general, sql2000
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 16:34.