Como melhorar a performance do meu select?

Delphi

25/08/2009

OLá amigos,
Estou montando um select que me dê a quantidade total por produto para intervalo de dias e número de carga:

select produtos.codgru,produtos.codsgru,produtos.nompro,
       produtos.codpro,volumes.sigla as nomvol,
       sum(vendasi.qtd) as totalqtd
from produtos ´+
      Left Join vendasi on produtos.codpro =vendasi.codpro
      Left join vendas  on vendas.pedido   =vendasi.pedido
      Left Join volumes on produtos.codvol =volumes.codvol
where vendas.carga     >= :car1   and vendas.carga     <= :car2  and
      vendas.datven    >= :dat1   and vendas.datven    <= :dat2
group by
      produtos.codgru,produtos.codsgru,produtos.nompro,
      produtos.codpro,nomvol
order by
      produtos.codgru,produtos.codsgru,produtos.nompro


Só que esse SQL está muito lento. Como poderia melhorar sua velocidade?

Registros nas tabelas:
Produtos: 1.076
Vendas: 45.200
Itens das Vendas: 280.000

Att
Mario


Aldus

Aldus

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

25/08/2009

pelo numero de registros o resultado deveria ser instantâneo.

veja se não estão faltando índices. você deve criar índices para os campos de relacionamento e para aqueles que servirão de condição para suas pesquisas.

produto
---------------
codpro
codgru
codsgru
nompro

vendas
---------------
pedido
carga
datven

vendasi
---------------
pedido
codpro

volumes
---------------
codvol

outra coisa: porque você não usa o próprio campo [i:847c300b89]volumes.sigla[/i:847c300b89] ao invés do apelido [i:847c300b89]nomvol[/i:847c300b89] no agrupamento?


GOSTEI 0
Pestana_

Pestana_

25/08/2009

Estou achando estranho, porque não tem muitos registros para demorar tanto, você poderia dizer quanto tempo demora para retornar os registros?

A príncipio você poderia fazer o que o [b:32fd7bf6bb]emerson[/b:32fd7bf6bb] citou, mas procure escolher o índice que seja mais eficiente no seu caso!


boa sorte!


GOSTEI 0
POSTAR