Fórum Por que tanto tempo para abrir uma query? #222154

24/03/2004

0

A instrução SQL abaixo funciona blz. Só que demora demais para carregar, e são poucos os registros.
O que poderia ser? Uso Firebird.
Obrigado

SELECT PRODUTOS.CODIGO,
PRODUTOS.DESCRICAO as DESCRPRODUTO,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´E´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.OPERACAO = ´S´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida
from PRODUTOS


Valdirdill

Valdirdill

Responder

Posts

25/03/2004

Lucas Silva

Talvez seu banco de dados possa está corrompído.
Dê uma olhada no fórum de interbase, que lá tem a explicação de como reparar um BD!


Responder

Gostei + 0

25/03/2004

Rômulo Barros

Quais os componentes q tais utilizando? É da paleta DBExpress ?


Responder

Gostei + 0

25/03/2004

Emerson Nascimento

tente utilizar ´apelidos´ para suas tabelas. acho que pode estar havendo uma confusão devido ao uso da mesma tabela 2 vezes com o mesmo nome.

tente alterar para:
SELECT PROD.CODIGO, PROD.DESCRICAO as DESCRPRODUTO,
        (Select sum (MOV_E.QUANTIDADE)
          from MOVIESTOQUE MOV_E
          Where MOV_E.OPERACAO = ´E´
          and MOV_E.PRODUTO = PROD.CODIGO) as SubTotalEntrada,
        (Select sum (MOV_S.QUANTIDADE)
          from MOVIESTOQUE MOV_S
          Where MOV_S.OPERACAO = ´S´
          and MOV_S.PRODUTO = PROD.CODIGO) as SubTotalSaida
from PRODUTOS
where....

ou:
SELECT PROD.CODIGO, PROD.DESCRICAO DESCRPRODUTO,
          sum(MOV_E.QUANTIDADE) SubTotalEntrada,
          sum(MOV_S.QUANTIDADE) SubTotalSaida,
from PRODUTOS PROD
left join MOVIESTOQUE MOV_E on (MOV_E.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´E´)
left join MOVIESTOQUE MOV_S on (MOV_S.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´S´)
where.....
group by PROD.CODIGO


Responder

Gostei + 0

25/03/2004

Ilopaiz

Acho q o problema pode ser de falta de índices... veja quais campos vc está usando para selecionar a tabela e crie índice para cada um deles.... eu tinha uma consulta q demorava quase 10 minutos e com os índices certos passou a demorar 40 segundos....


Responder

Gostei + 0

25/03/2004

Weber

Não é aconselhavel colocar um Select dentro de outro Select (se bem que eu faço isso sempre)

Vamos interpretar seu Select.

SELECT PRODUTOS.CODIGO, PRODUTOS.DESCRICAO as DESCRPRODUTO,
   (Select sum (MOVIESTOQUE.QUANTIDADE) from MOVIESTOQUE Where MOVIESTOQUE.OPERACAO = ´E´ and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada,
   (Select sum (MOVIESTOQUE.QUANTIDADE) from MOVIESTOQUE 
Where MOVIESTOQUE.OPERACAO = ´S´ and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida
from PRODUTOS


Veja bem o que acontece, para cada produto da tabela Produtos são feitos mais dois Select na tabela MoviEstoque. Dessa forma se você 100 produtos são feitos 200 select´s na Tabela MoviEstoque. É por isso que acaba ficando lento.


Responder

Gostei + 0

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

Aceitar