Usuário com melhor resposta
Otimização de Consulta

Pergunta
-
Boa tarde Galera!
Recebi esta consulta para desenvolver um relatório e gostaria da opinião dos mais experientes para melhorar o desempenho das mesma. Caso precise de acesso ao banco, poderei disponibilizar a base de homologação.
IsNull(STO.IS_SET, 0) As IS_SET, FORN.IS_FOR, FORN.NM_FOR_RED As Fornecedor, MST.NM_MST_PAX As Passageiro,
Convert(char(10),RST.CD_RST,103) As Reserva, Convert(char(10),RST.DT_RST_EMI,103) As Emissao,
Cast(MST.VL_MST_TAR As Decimal(15,2)) As Vl_Original, MST.NM_MST_MOE As Moeda, MST.VL_MST_CAM As Cambio,
MST.NR_MST_BIL, MST.NR_MST_OPV, MST.NR_MST_VIA AS Solicitacao, Convert(char(10),TRE.DT_TRE_SAI,103) As Saida,
Convert(char(10),MST.DT_MST_ENT,103) As Dt_Entrada, Convert(char(10),MST.DT_MST_SAI,103) As Dt_Saida,
Cast(IsNull(MST.VL_MST_TAR, 0) * IsNull(MST.VL_MST_CAM, 0) As Decimal(15,2)) As Valor, TRE.NM_TRE As Rota,
SER.NM_SER_CLA As Produto, MST.NM_MST_CP2 As Complemento, Cast(IsNull(MST.VL_MST_TAX_FAT, 0) As Decimal(15,2)) As Taxas,
Cast(IsNull(MST.VL_MST_FEE, 0) As Decimal(15,2)) As Taxa_Servico, Cast(IsNull(MST.VL_MST_DES, 0) As Decimal(15,2)) As Desconto,
Cast(Case When RST.CD_RST_FPG <> 6 Then
-- CASO TENHA DESCONTO, EXIBIR.
IsNull(MST.VL_MST_TAR, 0) * IsNull(MST.VL_MST_CAM, 0) + IsNull(MST.VL_MST_FEE, 0) + IsNull(MST.VL_MST_TAX_FAT, 0) + IsNull(MST.VL_MST_TDU, 0) - IsNull(MST.VL_MST_DES, 0)
Else IsNull(MST.VL_MST_TEX, 0) End As Decimal(15,2)) As Total,
isnull(MST.DS_MST_OB1, '') + ' ' + isnull(MST.DS_MST_OB2, '') As Observacao,
IsNull(MST.VL_MST_TDU, 0) As Taxas_Repasse, RST.NR_RST_RES As Integracao,
CLI.TP_CLI_DED_ISS, CLI.TP_CLI_INC_ISS_TDU, CLI.TP_CLI_INC_ISS_TSE,
(SELECT T02.TX_IEM FROM T_IMP T01, T_IEM T02 WHERE T01.IS_IMP = T02.IS_IMP AND T01.TP_IMP = 1 AND T02.IS_EMP = RST.NR_RST_EST
AND T02.DT_IEM = (SELECT MAX(T99.DT_IEM) FROM T_IEM T99 WHERE T99.IS_EMP = T02.IS_EMP AND T99.IS_IMP = T02.IS_IMP AND T99.DT_IEM <= RST.DT_RST_EMI)) AS TX_IEM
From T_RST RST WITH (NOLOCK)
Join T_MST MST WITH (NOLOCK) On RST.IS_RST = MST.IS_RST
Join T_CLI CLI WITH (NOLOCK) On RST.CD_RST_CLI = CLI.IS_CLI
Join T_FOR FORN WITH (NOLOCK)On RST.CD_RST_FSE = FORN.IS_FOR
Join T_SER SER WITH (NOLOCK) On RST.CD_RST_PRO = SER.IS_SER
Left Join T_SET STO WITH (NOLOCK) On RST.IS_SET = STO.IS_SET
Left Join T_TRE_AUX TRE WITH (NOLOCK) On RST.IS_RST = TRE.IS_RST And MST.NR_MST_BIL = TRE.NR_TRS_BIL
Where RST.NR_RST_FAT = 'FT00000125'
Order By FORN.NM_FOR
- Editado Perdoeis quinta-feira, 19 de junho de 2014 01:25
Respostas
-
Deleted
- Sugerido como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:15
Todas as Respostas
-
Deleted
- Sugerido como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:15
-
-
Pedro,
Vamos por partes, você chegou o Plano de Execuçã(Execution Plan) para verificar em quais partes sua query esta levando mais tempo de processamento?
Este recurso esta disponível dentro do Management Studio.
Agora um pergunta, suas tabelas estão definidas com chaves primárias?
Os campos declarados nos Joins possuem chaves?
Os campos declarados não Where apresentam ou possuem índices?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:15