Sou novo aqui no forum e no mundo do desenvolvimento.
Tenho um sistema na empresa onde trabalho que, devido às necessidades do usuário (que por sinal é o dono da empresa), está utilizando uma query (feita por mim) muito grande e que acabou ficando lenta demais. Ela demora cerca de 10 minutos para ser executada.
Vou postá-la abaixo e gostaria de que alguém me desse uma luz para torná-la mais eficiente. Saliento que ela está sendo usada por um objeco ADODC do VB.
sql = "select p.cod_produto, p.cod_produto * 10 + rx.dbo.calcdigitomod11(p.cod_produto) as CodProduto, p.descricao, p.preço, (e.estoque - e.retencao) as Estoque, " _
& "(select unidades from rx.dbo.hist_per_produto where ano = " & Ano & " and periodo = " & Mes - 3 & " and cod_produto = p.cod_produto) as Media3, " _
& "(select unidades from rx.dbo.hist_per_produto where ano = " & Ano & " and periodo = " & Mes - 2 & " and cod_produto = p.cod_produto) as Media2, " _
& "(select unidades from rx.dbo.hist_per_produto where ano = " & Ano & " and periodo = " & Mes - 1 & " and cod_produto = p.cod_produto) as Media1, " _
& "(select unidades from rx.dbo.hist_per_produto where ano = " & Ano & " and periodo = " & Mes & " and cod_produto = p.cod_produto) as Atual, " _
& "round((select media_90 from rx.dbo.produto_estatistica where cod_produto = p.cod_produto),2) as Media90, " _
& "round((Select top 1 valor_unitario from rx.dbo.titulo_item as ti inner join rx.dbo.titulo as t on ti.cod_titulo = t.cod_titulo where ti.cod_produto = p.cod_produto and t.operacao_pedido = 7 order by t.emissao desc),2) as Custo, " _
& "(Select top 1 quantidade from rx.dbo.titulo_item as ti inner join rx.dbo.titulo as t on ti.cod_titulo = t.cod_titulo where ti.cod_produto = p.cod_produto and t.operacao_pedido = 7 order by t.emissao desc) as Quantidade, " _
& "(select sum (pci.qtd_pedida - pci.recebido) from rx.dbo.ped_compra_item as pci inner join rx.dbo.ped_compra as pc on pci.cod_pedido = pc.cod_pedido where pci.cod_produto = p.cod_produto and pc.cod_situacao not in(50,60) and pc.digitando = 0 having sum (pci.qtd_pedida - pci.recebido) >= 0) as Pendente, " _
& "(select top 1 validade from rx.dbo.lote as l inner join rx.dbo.lote_estoque as le on l.id_lote = le.id_lote where id_lote_classificacao = 1 and estoque > 0 and l.cod_produto = p.cod_produto order by validade) as Validade, " _
& "(select preço from vccustom.dbo.promocao_mensal where codproduto = p.cod_produto and mes = " & Mes & " and ano = " & Ano & ") as Promo, " _
& "p.unidade, p.emb_compra, en.fantasia " _
& "from rx.dbo.produto as p inner join rx.dbo.produto_estoque as e on p.cod_produto = e.cod_produto " _
& "inner join rx.dbo.entidade as en on p.cod_entidade = en.cod_entidade " _
& "Where p.situacao = 0 " _
& "order by p.descricao "
Pergunta
GilbertoMiranda
Olá pessoal.
Sou novo aqui no forum e no mundo do desenvolvimento.
Tenho um sistema na empresa onde trabalho que, devido às necessidades do usuário (que por sinal é o dono da empresa), está utilizando uma query (feita por mim) muito grande e que acabou ficando lenta demais. Ela demora cerca de 10 minutos para ser executada.
Vou postá-la abaixo e gostaria de que alguém me desse uma luz para torná-la mais eficiente. Saliento que ela está sendo usada por um objeco ADODC do VB.
Agradeço desde já a atenção.
Att,
Gilberto.
Editado por kuroiAdicionar tag CODE
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.