Boa tarde,
Gostaria de uma ajuda para otimizar a query abaixo. O resultado é de 9000 linhas em =~8/9 min. Obrigado.
SELECT DISTINCT (N.IDNOTA) AS ID_NOTA_FISCAL,
(N.CDNOTA) AS NO_NOTA_FISCAL,
(C.CDPARCEIROCOMERCIAL) AS COD_COMPANHIA,
(C.NMPARCEIROCOMERCIAL) AS NOME_COMPANHIA,
(T.CDTRANSPORTADORA) AS COD_TRANSP,
(T.DSAPELIDOTRANSPORTADORA) AS NOME_TRANSP,
CONVERT (VARCHAR,N.DTEMBARQUE,103) AS DATA_EMBARQUE,
(RR.DSREFERENCIA) AS ROMANEIO_TIPO_VIAGEM,
(EQ.CDEQUIPAMENTO) AS COD_EQUIPAMENTO,
(D.CDPARCEIROCOMERCIAL) AS COD_DESTINATARIO,
(D.NMPARCEIROCOMERCIAL) AS NOME_DESTINATARIO,
(CID.NMCIDADE) AS CID_DESTINO,
(UF.CDUF) AS UF_DESTINO,
(R.CDROMANEIO) AS ROMANEIO,
ROUND (SUM(I.VRNTAITEM),2)/ROUND(COUNT(DISTINCT I.IDITEM),2) AS VR_NOTA_FISCAL,
ROUND (SUM(LNP.VRFRETERATEIOPREVISTO),2)/ROUND (COUNT(DISTINCT I.IDITEM),2) AS VR_FR_PREVISTO,
ROUND (SUM(I.QTPESOBRUTO),2)/ROUND (COUNT(DISTINCT I.IDITEM),2) AS QT_PESO_BRUTO,
ROUND (SUM(I.QTVOLUME),2)/ROUND (COUNT(DISTINCT I.IDITEM),2) AS QT_VOLUMES,
(RN.DSREFERENCIA) AS CANAL_VENDAS,
(E.DSEVENTO) AS EVENTO,
(N.DSLOTE) AS LOTE,
ROUND (SUM(LNP.VRFRETERATEIOCOBRADO),2)/ROUND (COUNT(DISTINCT I.IDITEM),2) AS VR_FR_COBRADO,
ROUND (SUM(LNP.VRAPAGARCOBRADO),2)/ROUND (COUNT(DISTINCT I.IDITEM),2) AS VR_FR_A_PAGAR_COBRADO,
(TN.CDTIPONOTA) AS COD_TIPO_NOTA,
(TN.DSTIPONOTA) AS DESC_TIPO_NOTA,
(UFR.DSUFREGIAO) AS REGIAO_UF,
CASE N.TPFRETE WHEN 1 THEN 'CIF' WHEN 2 THEN 'FOB' END AS TIPO_FRETE
FROM GKOSCF.FMNOTA AS N LEFT JOIN GKOSCF.FCTRANSP AS T ON N.IDTRANSPORTADORA = T.IDTRANSPORTADORA
LEFT JOIN GKOSCF.FCPARCOM AS C ON N.IDPAREMITENTE = C.IDPARCEIROCOMERCIAL
LEFT JOIN GKOSCF.FCPARCOM AS D ON N.IDPARDESTREMET = D.IDPARCEIROCOMERCIAL
LEFT JOIN GKOSCF.FRCONNTA AS RLN ON N.IDNOTA = RLN.IDNOTA
LEFT JOIN GKOSCF.FMCONHEC AS L ON RLN.IDCONHECIMENTO = L.IDCONHECIMENTO
LEFT JOIN GKOSCF.FCCIDADE AS CID ON L.IDCIDDESTINO = CID.IDCIDADE
LEFT JOIN GKOSCF.FCUF AS UF ON CID.IDUF = UF.IDUF
LEFT JOIN GKOSCF.FCEVENTO AS E ON L.IDEVENTOPRINCIPAL = E.IDEVENTO
LEFT JOIN GKOSCF.FRCONOCO AS RLO ON L.IDCONHECIMENTO = RLO.IDCONHECIMENTO
LEFT JOIN GKOSCF.FMOCORRE AS O ON RLO.IDOCORRENCIA = O.IDOCORRENCIA
LEFT JOIN GKOSCF.FCTPOOCO AS TPO ON TPO.IDTIPOOCORRENCIA = O.IDTIPOOCORRENCIA
LEFT JOIN GKOSCF.FMCONRAT AS LNP ON N.IDNOTA = LNP.IDNOTA
LEFT JOIN GKOSCF.FCUFREG AS UFR ON UF.IDUFREGIAO = UFR.IDUFREGIAO
LEFT JOIN GKOSCF.FMROMANE AS R ON N.IDROMANEIO = R.IDROMANEIO
LEFT JOIN GKOSCF.FCEQUIPA AS EQ ON R.IDEQUIPAMENTO = EQ.IDEQUIPAMENTO
LEFT JOIN GKOSCF.FMNTAITM AS I ON N.IDNOTA = I.IDNOTA
LEFT JOIN GKOSCF.FCTPNOTA AS TN ON N.IDTIPONOTA = TN.IDTIPONOTA
LEFT JOIN GKOSCF.FMREFER AS RN ON N.IDNOTA = RN.IDMOVIMENTO
LEFT JOIN GKOSCF.FMREFER AS RR ON R.IDROMANEIO = RR.IDMOVIMENTO
WHERE L.IDEVENTOPRINCIPAL = '1' AND
L.DTEMBARQUE BETWEEN '1/1/2015' AND '2/1/2015'
GROUP BY N.IDNOTA, N.CDNOTA, C.CDPARCEIROCOMERCIAL, C.NMPARCEIROCOMERCIAL, T.CDTRANSPORTADORA,
T.DSAPELIDOTRANSPORTADORA, N.DTEMBARQUE, RR.DSREFERENCIA, RN.DSREFERENCIA, EQ.CDEQUIPAMENTO,
D.CDPARCEIROCOMERCIAL, D.NMPARCEIROCOMERCIAL, CID.NMCIDADE, UF.CDUF, R.CDROMANEIO,
N.VRPESOBRUTO, N.QTVOLUME, E.DSEVENTO, N.DSLOTE, TN.CDTIPONOTA, TN.DSTIPONOTA, UFR.DSUFREGIAO, N.TPFRETE
ORDER BY N.CDNOTA ASC