Fórum Aumentar a velocidade da consulta #53219

07/10/2005

0

Oi, Uso Delphi 6 e Firebird 1.5

Sei que é uma rotina comprida demais, mas coloquei ela no final só pra se ter uma idéia do meu problema, que é o seguinte:
Preciso fazer uma consulta onde apareça os clientes que estejam devendo para a firma e que nao tenham relação nas tabelas indicanota que nao estejam pagas (as notas tem relaçoes com outras e pode indicar um pagamento parcial), a consulta deveria ficar desse jeito mesmo e sem o segundo select a consulta é rápida, mas com o segundo select ele demora uns 20 segundos.

Alguem teria alguma ideia de como agilizar isso. Ouvi falar de criar view, no próprio firebird, mas não sei nada sobre isso. Eles são melhores mesmo, e se for alguem teria alguma apostila de como fazer, ou algum exemplo que possa me passar.

Agradeço antecipadamente qualquer ajuda.


Select Distinct a.CodCli_Forn, a.NomeFantasia, a.Ativo, a.Tipo,
a.RazaoSocial, a.CodCidade, a.CodGrupo, a.CodSubGrupo
from CadCli_Forn a, MovProdutos b, CadTipoDocumentos c
where (a.CodCli_Forn = b.CodCliente
or a.CodCli_Forn = b.CodImposto
or a.CodCli_Forn = b.CodDespesa)
and b.CodTipoDocumento = c.CodTipoDocumento
and b.CodFilial = ´1´
and b.ValorTotal > b.ValorPago
and (b.CodTipoDocumento < ´1000´
and c.AtualFinanceiro = ´N´
and c.AtualContabilidade = ´S´
and not(b.CodMovProdutos in
(Select a.CodMovNota from IndicaNota a,
MovProdutos b where a.CodMovPaga = b.CodMovProdutos
and a.CodFilial = b.CodFilial
and b.ValorTotal > b.ValorPago)))
and (a.Tipo = ´C´ or a.Tipo = ´A´)
and (c.CodNatureza = ´4´
or c.CodNatureza = ´6´
or c.CodNatureza = ´3´)


[color=blue:5cb9b43436][b:5cb9b43436]Movido de Delphi para Interbase/Firebird[/b:5cb9b43436][/color:5cb9b43436]


Salupe

Salupe

Responder

Posts

07/10/2005

Brazilian-bard

Soh uma dica

acredito q isso nao resolva seu problema mas uma boa prática de SQL no FB 1.5


Responder

Gostei + 0

07/10/2005

Brazilian-bard

ignore o anterior :oops:


Soh uma dica

acredito q isso nao resolva seu problema mas uma boa prática de SQL no FB 1.5.3 RC2 é usar:

select x 
from table, other_table
where table.cod = other_table.cod
  and table.y in (other_table.x, other_table.y)


invés de

select x 
from table, other_table
where table.cod = other_table.cod
  and (table.y = other_table.x or table.y = other_table.y)



e vale a pena analizar como usar o In... use primeiro valores que possam ser mais frequentes para melhorar o tempo de resposta


Responder

Gostei + 0

07/10/2005

Salupe

obrigado pela dica, já melhorou um pouco a performance.
outra coisa.

existe como fazer uma somatória de todas as contas de um cliente que estão como devedoras, dentro desta consulta.
Porque hoje mostra apenas um registro de cada cliente (como realmente preciso que seja) só que preciso que apareça a somatória de todas as contas dele, sendo que preciso diminuir do valor total o valor pago. Hoje coloco isso em uma nova consulta dentro do calc fields, mas queria saber se um sum dentro deste select resolveria isso pra mim, e o que teria que declarar para isso.

Agradeço antecipadamente qualquer ajuda.


Responder

Gostei + 0

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

Aceitar