Select demora muito - Firebird

23/01/2015

0

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

Responder

Posts

23/01/2015

Ronaldo Lanhellas

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

23/01/2015

Marlon Minotti

20000 produtos e 7500 mov_produtos
Responder

23/01/2015

Marlon Minotti

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

23/01/2015

Marlon Minotti

É... 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?
Responder

11/02/2015

Douglas

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar