Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2017, 15:53
Avatar de jandrogdz
jandrogdz
 
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 12 años, 4 meses
Puntos: 12
Pregunta Optimizar query

Buenas foro.

Tengo un a query en sql server pero tarda mucho , aunque solo envie un cliente y los calculos sean muy rapidos tarda mucho, alguien me podria apoyar con sus consejos a optimizar la query.

De antemano muchas gracias.

Código SQL:
Ver original
  1. DECLARE @pFechaDel DATE = '2017-03-22'
  2. DECLARE @pFechaAl DATE = '2017-03-22'
  3. DECLARE @IdGuids nvarchar(MAX) =  '7078a725-ca59-4b71-bc56-21b8f456d63b'
  4.  
  5. SELECT isnull(SUM(CH.Total),0) AS Facturas,
  6.  
  7. isnull(COUNT(CH.Total),0) AS CountFacturas,
  8. (SELECT isnull(SUM(P1.Monto),0) FROM Finanzas.PagosrecibidosCheque P1 INNER JOIN
  9. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE  CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND  
  10. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS Cheques,
  11. (SELECT isnull(COUNT(P1.Monto),0) FROM Finanzas.PagosrecibidosCheque P1 INNER JOIN
  12. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE  CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND  
  13. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS CountCheques,
  14. (SELECT isnull(SUM(P1.Monto),0) FROM Finanzas.PagosRecibidosTransf P1 INNER JOIN
  15. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  16. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS Transferencias,
  17. (SELECT isnull(COUNT(P1.Monto),0) FROM Finanzas.PagosRecibidosTransf P1 INNER JOIN
  18. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  19. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS CountTransferencias,
  20. (SELECT isnull(SUM(P1.Monto),0) FROM Finanzas.PagosRecibidosEfect P1 INNER JOIN
  21. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  22. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS Efectivos,
  23. (SELECT isnull(COUNT(P1.Monto),0) FROM Finanzas.PagosRecibidosEfect P1 INNER JOIN
  24. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  25. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS CountEfectivos,
  26. (SELECT isnull(SUM(P1.Monto),0) FROM Finanzas.PagosRecibidosTarjeta P1 INNER JOIN
  27. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  28. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS Tarjetas,
  29. (SELECT isnull(COUNT(P1.Monto),0) FROM Finanzas.PagosRecibidosTarjeta P1 INNER JOIN
  30. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND
  31. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS CountTarjetas,
  32. (SELECT isnull(SUM(CH1.Total),0) FROM Ventas.vCalculosHeader CH1 WHERE CH1.TipoDocto='V4' AND CH1.Cancelada=0 AND CONVERT(DATE, CH1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl
  33. AND CH1.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))) AS NotasCredito,
  34. (SELECT isnull(COUNT(CH1.Total),0) FROM Ventas.vCalculosHeader CH1 WHERE CH1.TipoDocto='V4' AND CH1.Cancelada=0 AND CONVERT(DATE, CH1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl
  35. AND CH1.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))) AS CountNotasCredito,
  36. (SELECT isnull(SUM(CH1.Total),0) FROM Ventas.vCalculosHeader CH1 WHERE CH1.TipoDocto='V6' AND CH1.Cancelada=0 AND CONVERT(DATE, CH1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl
  37. AND CH1.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))) AS DevolucionMcia,
  38. (SELECT isnull(COUNT(CH1.Total),0) FROM Ventas.vCalculosHeader CH1 WHERE CH1.TipoDocto='V6' AND CH1.Cancelada=0 AND CONVERT(DATE, CH1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl
  39. AND CH1.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))) AS CountDevolucionMcia,
  40. (SELECT IsNull(SUM(b.Cargo)-SUM(b.Abono),0)
  41. FROM Ventas.vDetalleClientes b
  42. WHERE CONVERT(DATE, b.Fecha , 103) < @pFechaDel AND b.IdGuid IN (SELECT IdGuid FROM Ventas.vCalculosHeader WHERE Cancelada=0)
  43. AND b.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))
  44. ) AS SaldoIniFijo,
  45. (SELECT IsNull(SUM(b.Cargo)-SUM(b.Abono),0)
  46. FROM Ventas.vDetalleClientes b
  47. WHERE CONVERT(DATE, b.Fecha , 103) <= @pFechaAl AND b.IdGuid IN (SELECT IdGuid FROM Ventas.vCalculosHeader WHERE Cancelada=0)
  48. AND b.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))
  49.  ) AS SaldoFinFijo,
  50. datediff(d,@pFechaDel,@pFechaAl)+1 AS DifFechas
  51.  
  52.  
  53. FROM Ventas.vCalculosHeader CH WITH (INDEX = idx_ClaveCliente)
  54. WHERE CH.TipoDocto='V3' AND CONVERT(DATE, CH.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND Cancelada =0
  55. AND CH.ClaveCliente IN (SELECT C.Clave FROM Clientes C WHERE C.IdGuid IN (@IdGuids))
__________________
Lo imposible solo cuesta un poco mas