Select demora muito - Firebird

SQL

Delphi

Firebird

23/01/2015

Boa tarde amigooos. Estou com este select:

select sum(coalesce(mov.estoq_ant, 0)+coalesce(mov.entrada, 0)-coalesce(mov.saida,0)) as estoque,
pro.codigo, pro.nome, pro.cod_forn, pro.venda, pro.cod_tipo
from produtos pro
left join mov_produtos mov on(mov.cod_produto=pro.codigo)
where
mov.data between '01.01.2013' and '31.12.2013'
group by
pro.codigo,
pro.nome, pro.cod_forn, pro.venda, pro.cod_tipo


Ele demoraaaa muuuuuito mesmo para trazer os registros. Em torno de 5 minutos. E olha que ele não traz muitos registros não, somente uns 2000.

O que pode estar acontecendo? Utilizo Firebird 2.5 e Delphi 7
Marlon Minotti

Marlon Minotti

Curtidas 0

Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

23/01/2015

Trazer poucos não significa que ele irá ser rápido, você está fazendo LEFT JOIN entre duas tabelas: produto e mov_produto. Qual a quantidade de registros de cada uma ?
GOSTEI 0
Marlon Minotti

Marlon Minotti

23/01/2015

20000 produtos e 7500 mov_produtos
GOSTEI 0
Marlon Minotti

Marlon Minotti

23/01/2015

Amigooooooooooooooooooooo do céu, você iluminou minha cabeça. Mudei a ordem do select e agora está trazendo rapidão.
GOSTEI 0
Marlon Minotti

Marlon Minotti

23/01/2015

É... eu achei que iria resolver o problema quando o select ficasse mais ágil, porém o meu problema ainda persiste.

Vê se você pode me ajudar, estou com problema de Out of Memory. Quando eu faço o select e passo o comando:

while not queryRSRS.eof then
begin
  RSRS := queryRSRS.FieldByName('RSRS').asstring;

  queryRSRS.next;
end;


Neste momento eu sempre recebo a mensagem "Out of Memory". Pode me ajudar?
GOSTEI 0
Douglas

Douglas

23/01/2015

Marlon, tudo bem?
Quantos registros tem na Query? O erro acontece exatamente neste ponto do código?
GOSTEI 0
POSTAR