Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/07/2016, 10:14
alderhernandez
 
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.