Fórum Otimizar consulta SQL #59596
26/03/2008
0
Alguém poderia me ajudar como otimizar a seguinte consulta... Desde já agradeço.
Select Distinct ReciboAX.STR_Campo1, ReciboAX.STR_NumeroReciboCredito, ReciboAX.DT_Emissao, ReciboAX.DBL_Campo4, CCLancto.STR_CodigoTipoCliente, CCLancto.STR_CodigoCliente, CCLancto.STR_CodigoTipoFilial, CCLancto.STR_CodigoFilial, Cliente.STR_NomeCadastro As STR_NomeCliente, Filial.STR_NomeCadastro As STR_NomeFilial, ContCorr.STR_NomeContaCorrente, ProcLanc.DT_Data As DT_DataLancamento From ReciboAX Left Join CCLancto on (ReciboAX.STR_Campo1 = CCLancto.STR_NumeroProcesso And ReciboAX.STR_CodigoHistProcesso = CCLancto.STR_CodigoHistProcesso) Left Join CCorrent on (CCLancto.LI_SeqContaCorrente = CCorrent.LI_SeqContaCorrente) Left Join ContCorr on (CCorrent.STR_CodigoBancCont = ContCorr.STR_CodigoBancCont And CCorrent.STR_CodigoAgencia = ContCorr.STR_CodigoAgencia And CCorrent.STR_CodigoContaCorrente = ContCorr.STR_CodigoContaCorrente ) Left Join Cadastro Cliente on ((CCLancto.STR_CodigoTipoCliente=Cliente.STR_CodigoTipoCadastro and CCLancto.STR_CodigoCliente=Cliente.STR_CodigoCadastro)) Left Join Cadastro Filial on ((CCLancto.STR_CodigoTipoFilial=Filial.STR_CodigoTipoCadastro and CCLancto.STR_CodigoFilial=Filial.STR_CodigoCadastro)) Left Join ProcLanc On ( ProcLanc.LI_SeqContaCorrente = CCorrent.LI_SeqContaCorrente) Where ( CCLancto.STR_CodigoTipoCliente Is Not Null And CCLancto.STR_CodigoCliente Is Not Null ) And ( Cast( ProcLanc.DT_Data As Date ) Between :DataIni And :DataFim ) And ( ProcLanc.DT_Data Is Not Null ) ORDER BY ReciboAX.STR_NumeroReciboCredito
Rvsantos
Curtir tópico
+ 0Posts
26/03/2008
Emerson Nascimento
Gostei + 0
27/03/2008
Rvsantos
Olá...
Gostaria de otimizar a performance...
[]s
Gostei + 0
05/04/2008
Emerson Nascimento
Select Distinct ReciboAX.STR_Campo1, ReciboAX.STR_NumeroReciboCredito, ReciboAX.DT_Emissao, ReciboAX.DBL_Campo4, CCLancto.STR_CodigoTipoCliente, CCLancto.STR_CodigoCliente, CCLancto.STR_CodigoTipoFilial, CCLancto.STR_CodigoFilial, Cliente.STR_NomeCadastro As STR_NomeCliente, Filial.STR_NomeCadastro As STR_NomeFilial, ContCorr.STR_NomeContaCorrente, ProcLanc.DT_Data As DT_DataLancamento From ReciboAX Left Join CCLancto on (CCLancto.STR_NumeroProcesso = ReciboAX.STR_Campo1 And CCLancto.STR_CodigoHistProcesso = ReciboAX.STR_CodigoHistProcesso) Left Join CCorrent on (CCorrent.LI_SeqContaCorrente = CCLancto.LI_SeqContaCorrente) Left Join ContCorr on (ContCorr.STR_CodigoBancCont = CCorrent.STR_CodigoBancCont And ContCorr.STR_CodigoAgencia = CCorrent.STR_CodigoAgencia And ContCorr.STR_CodigoContaCorrente = CCorrent.STR_CodigoContaCorrente) Inner Join Cadastro Cliente on (Cliente.STR_CodigoTipoCadastro = CCLancto.STR_CodigoTipoCliente and Cliente.STR_CodigoCadastro = CCLancto.STR_CodigoCliente) Left Join Cadastro Filial on (Filial.STR_CodigoTipoCadastro = CCLancto.STR_CodigoTipoFilial and Filial.STR_CodigoCadastro = CCLancto.STR_CodigoFilial) Left Join ProcLanc On (ProcLanc.LI_SeqContaCorrente = CCorrent.LI_SeqContaCorrente) Where Cast( ProcLanc.DT_Data As Date ) Between :DataIni And :DataFim Order by ReciboAX.STR_NumeroReciboCredito
eu troquei o [b:257e633aa7]left join[/b:257e633aa7] por [b:257e633aa7]inner join[/b:257e633aa7] no relacionamento da tabela [i:257e633aa7]cliente[/i:257e633aa7].
outra coisa: se já não houver, você precisará criar índices nas tabelas envolvidas.
CCLancto -> STR_NumeroProcesso, STR_CodigoHistProcesso
CCorrent -> LI_SeqCorrente
ContCorr -> STR_CodigoBancCont, STR_CodigoAgencia, STR_CodigoContaCorrente
Cadastro -> STR_CodigoTipoCadastro, STR_CodigoCadastro
ProcLanc -> LI_SeqContaCorrente
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)