Demora na consulta sql
Boa tarde,
Estou com um probleminha, na seguinte instrução sql
Nesta instrução o resultado é instantaneo 3Segundos para retornar.
Se eu coloco alguma condição, ou peço para ordenar "order by nftotal_nota"
Demora quase um minuto para dar o retorno.
O que posso fazer para melhorar?
Informações:
Estou usando o FB 2.1
Dados_Coleta é uma procedure
NFSaida Contem +- 6500 registros
Vendedor Contem +- 94 Registros
Clientes Contém +- 2500 Registros
Desde já agradeço
Estou com um probleminha, na seguinte instrução sql
Nesta instrução o resultado é instantaneo 3Segundos para retornar.
Select c.NFNUMNOTA, c.NFTOTAL_NOTA, c.CLICNPJ, c.NFTRANSPORT,
TRFONE, c.NFDATAPED,c.NFEMISSAO,TRNOME,c.NFPESOBRUTO,c.NFPREVISAO_ENTREGA,
c.NFCLICOD,c.CLIRAZAO,CIDNOME,CIDUF,TEM_ADIANTAMENTO,ESTA_DEVENDO,
COBRA_RESOLVIDO,COLETA_RESOLVIDO,CHEQDEV,CREDITO,DATASAIDA,
DATAENTREGA,ENTREGOU,RECEBEDOR,PREV_SAIDA,VOLUMES,c.NFNUMPED,
LINK,LOGIN,SENHA, n.nfordemcompra, vendnome, n.nfStatus,
case when (Select First 1 cr.crcontrole from cobranca cr Where cr.crclicod = c.nfclicod) is null
Then ' ' else 'X' end Cobra,
case when (Select First 1 co.ocorrencia from Coleta co Where co.nota = c.nfnumnota) is null
Then ' ' else 'X' end InfColeta,
case when (Select First 1 ico.ocorrencia from inf_cobranca ico Where ico.nota = c.nfnumnota) is null
Then ' ' else 'X' end InfCobra, nfRedespacho, usunome
from Dados_Coleta c
join nfsaida n on n.nfnumnota = c.nfnumnota
join vendedor v on v.vendcod = n.nfvendcod
join usuario u on u.Usulogin = n.nfusuario
join cliente c1 on c1.clicnpj = c.clicnpj
TRFONE, c.NFDATAPED,c.NFEMISSAO,TRNOME,c.NFPESOBRUTO,c.NFPREVISAO_ENTREGA,
c.NFCLICOD,c.CLIRAZAO,CIDNOME,CIDUF,TEM_ADIANTAMENTO,ESTA_DEVENDO,
COBRA_RESOLVIDO,COLETA_RESOLVIDO,CHEQDEV,CREDITO,DATASAIDA,
DATAENTREGA,ENTREGOU,RECEBEDOR,PREV_SAIDA,VOLUMES,c.NFNUMPED,
LINK,LOGIN,SENHA, n.nfordemcompra, vendnome, n.nfStatus,
case when (Select First 1 cr.crcontrole from cobranca cr Where cr.crclicod = c.nfclicod) is null
Then ' ' else 'X' end Cobra,
case when (Select First 1 co.ocorrencia from Coleta co Where co.nota = c.nfnumnota) is null
Then ' ' else 'X' end InfColeta,
case when (Select First 1 ico.ocorrencia from inf_cobranca ico Where ico.nota = c.nfnumnota) is null
Then ' ' else 'X' end InfCobra, nfRedespacho, usunome
from Dados_Coleta c
join nfsaida n on n.nfnumnota = c.nfnumnota
join vendedor v on v.vendcod = n.nfvendcod
join usuario u on u.Usulogin = n.nfusuario
join cliente c1 on c1.clicnpj = c.clicnpj
Se eu coloco alguma condição, ou peço para ordenar "order by nftotal_nota"
Demora quase um minuto para dar o retorno.
O que posso fazer para melhorar?
Informações:
Estou usando o FB 2.1
Dados_Coleta é uma procedure
NFSaida Contem +- 6500 registros
Vendedor Contem +- 94 Registros
Clientes Contém +- 2500 Registros
Desde já agradeço
Dirceu Morais
Curtidas 0
Respostas
Alex Lekao
26/02/2014
Oi Dirceu, boa tarde!!
Embora alguns nao concordem comigo vou te sugerir, mesmo que apenas para testes de performance por vc.
Experimente o seu codigo assim, sem usar join.
Verifique tambem indices que influenciam na pesquisa e esses campos que estao sem referencia as tabelas, talves eles podem estar influenciando por ter que procurar.
Espero realmente que ajude.
Desculpe nao poder ajudar mais e melhor.
Abraco.
Alex - Lekao
Embora alguns nao concordem comigo vou te sugerir, mesmo que apenas para testes de performance por vc.
Experimente o seu codigo assim, sem usar join.
Select
c.NFNUMNOTA,
c.NFTOTAL_NOTA,
c.CLICNPJ,
c.NFTRANSPORT,
TRFONE,
c.NFDATAPED,
c.NFEMISSAO,
TRNOME,
c.NFPESOBRUTO,
c.NFPREVISAO_ENTREGA,
c.NFCLICOD,
c.CLIRAZAO,
CIDNOME,
CIDUF,
TEM_ADIANTAMENTO,
ESTA_DEVENDO,
COBRA_RESOLVIDO,
COLETA_RESOLVIDO,
CHEQDEV,
CREDITO,
DATASAIDA,
DATAENTREGA,
ENTREGOU,
RECEBEDOR,
PREV_SAIDA,
VOLUMES,
c.NFNUMPED,
LINK,
LOGIN,
SENHA,
n.nfordemcompra,
vendnome,
n.nfStatus,
case
when (Select
First 1 cr.crcontrole
from cobranca cr
Where cr.crclicod = c.nfclicod) is null
Then ' '
else 'X'
end Cobra,
case
when (Select
First 1 co.ocorrencia
from Coleta co
Where co.nota = c.nfnumnota) is null
Then ' '
else 'X'
end InfColeta,
case
when (Select
First 1 ico.ocorrencia
from inf_cobranca ico
Where ico.nota = c.nfnumnota) is null
Then ' '
else 'X'
end InfCobra,
nfRedespacho,
usunome
from Dados_Coleta c, nfsaida n, vendedor v, usuario u, cliente c1
where n.nfnumnota = c.nfnumnota
and v.vendcod = n.nfvendcod
and u.Usulogin = n.nfusuario
and c1.clicnpj = c.clicnpj
Verifique tambem indices que influenciam na pesquisa e esses campos que estao sem referencia as tabelas, talves eles podem estar influenciando por ter que procurar.
Espero realmente que ajude.
Desculpe nao poder ajudar mais e melhor.
Abraco.
Alex - Lekao
GOSTEI 0
Dirceu Morais
26/02/2014
Alex,
Valeu. Não cheguei a olhar indices conforme vc se refere, mas a consulta quando coloco condições continua demorada.
Ainda procuro soluções;
Valeu. Não cheguei a olhar indices conforme vc se refere, mas a consulta quando coloco condições continua demorada.
Ainda procuro soluções;
GOSTEI 0
Alex Lekao
26/02/2014
Entendi.
Acredito que com indices a perfomance ja tera uma boa melhora.
Vc chegou a verifricar esses campos que estao sem a referencia da tabela se nao pode ser isso?
Outra possibilidade talvez nao seria uma das melhores, seria tentar ir fazendo por partes, join por poin para ver qual que faz com que demora mais.
Pode ser apenas um deles que esta causando a demora demasiada, talvez vc possa fazer isso e depois tentar ajustar algum outro campo, ou mais campos para aumentar os links entre as tabelas, para ver se resolve.
Abraco.
Alex - Lekao
Acredito que com indices a perfomance ja tera uma boa melhora.
Vc chegou a verifricar esses campos que estao sem a referencia da tabela se nao pode ser isso?
Outra possibilidade talvez nao seria uma das melhores, seria tentar ir fazendo por partes, join por poin para ver qual que faz com que demora mais.
Pode ser apenas um deles que esta causando a demora demasiada, talvez vc possa fazer isso e depois tentar ajustar algum outro campo, ou mais campos para aumentar os links entre as tabelas, para ver se resolve.
Abraco.
Alex - Lekao
GOSTEI 0