Fórum Demora na consulta sql #471328

26/02/2014

0

Boa tarde,

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


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

Dirceu Morais

Responder

Posts

26/02/2014

Alex Lekao

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.

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
Responder

Gostei + 0

26/02/2014

Dirceu Morais

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;
Responder

Gostei + 0

26/02/2014

Alex Lekao

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar