otimização de Consulta
Olá, tenho uma consulta feita no pl/sql que demora muito pra retornar o resultado. Gostaria de saber se posso melhora-la de alguma forma para reduzir seu tempo de resposta.
A quantidade de dados pesquisados é bem grande o que piora a situação.
Agradeço qualquer ajuda.
o código é esse:
[color=blue:6611f358c0]Select codprod,
coditprod,
digitprod,
unidade,
qtembcomp,
produto,
codforne,
fantasia,
preco2,
precoalterna,
sum(totprbase) as totprbase,
sum(qtdtotal) as qtdtotal,
sum(vltot) as vltotal,
sum(peso) as peso,
0.00 PRTRANSF,
0.00 MARKUP,
0.00 QTDCX,
0.00 PART,
0.00 PRMEDIO,
0.00 dvend,
0.00 dmed,
sum(OCNF) OCNF,
sum(OCPDV) OCPDV
From (Select ip.codprod,
its.coditprod,
ip.digitprod,
prd.unidade,
e3.qtemb as qtembcomp,
max(nvl(prd.descricao, ´´) || nvl(ip.tamanho, ´´) ||
nvl(cor.descres, ´´) || +nvl(esp.descres, ´´)) as produto,
frn.codforne,
frn.fantasia,
max(prc.preco2) as preco2,
max(prc.precoalterna) as precoalterna,
sum(nvl(prc.preco2, 0) * (its.qtcomp * its.qtemb)) as totprbase,
sum(its.qtcomp * its.qtemb) as qtdtotal,
sum(nvl(its.vltotal, 0)) as vltot,
sum(prd.pesoliq * its.qtcomp * its.qtemb) as peso,
(Case
when ms.tipoped in (0, 2) then
count(distinct its.numnota)
end) as OCNF,
(Case
when ms.tipoped in (1) then
count(distinct its.numnota)
end) as OCPDV
From MOV_SAIDA ms,
MOV_ITSAIDA its,
CAD_PROD PRD,
CAD_ITPROD IP,
CAD_ESPEC ESP,
CAD_COR COR,
CAD_FORNE frn,
CAD_PRECO PRC,
CAD_FILIAL fil ,
(Select e.codprod, e.tpemb,
max(e.codembal) as codembal,
max(e.qtemb) as qtemb
From cad_embal e
Where e.tpemb = (Select min(e2.tpemb)
From cad_embal e2
Where e.codprod=e2.codprod)
Group by e.codprod, e.tpemb) e3
Where ms.codfil = its.codfil
and ms.tpnota = its.tpnota
and ms.numnota = its.numnota
and ms.serie = its.serie
and ms.dtnota = its.dtnota
and ms.codfil = fil.codfil
and its.coditprod = ip.coditprod
and ip.codprod = prd.codprod
and prd.codforne = frn.codforne
and ip.especific = esp.especific
and ip.codfam = esp.codfam
and ip.codcor = cor.codcor
and prc.coditprod = its.coditprod
and ip.codprod = e3.codprod
and its.status <> 9
and prc.codembal = 0
and prc.codfil = 1
and its.tpnota in (51, 133)
and its.dtnota between ´01/12/2006´ and ´31/12/2006´
Group by ms.tipoped,
ip.codprod,
its.coditprod,
ip.digitprod,
prd.descricao,
prd.unidade,
e3.qtemb,
frn.codforne,
frn.fantasia)
Group by codprod,
coditprod,
digitprod,
unidade,
qtembcomp,
produto,
codforne,
fantasia,
preco2,
precoalterna[/color:6611f358c0]
A quantidade de dados pesquisados é bem grande o que piora a situação.
Agradeço qualquer ajuda.
o código é esse:
[color=blue:6611f358c0]Select codprod,
coditprod,
digitprod,
unidade,
qtembcomp,
produto,
codforne,
fantasia,
preco2,
precoalterna,
sum(totprbase) as totprbase,
sum(qtdtotal) as qtdtotal,
sum(vltot) as vltotal,
sum(peso) as peso,
0.00 PRTRANSF,
0.00 MARKUP,
0.00 QTDCX,
0.00 PART,
0.00 PRMEDIO,
0.00 dvend,
0.00 dmed,
sum(OCNF) OCNF,
sum(OCPDV) OCPDV
From (Select ip.codprod,
its.coditprod,
ip.digitprod,
prd.unidade,
e3.qtemb as qtembcomp,
max(nvl(prd.descricao, ´´) || nvl(ip.tamanho, ´´) ||
nvl(cor.descres, ´´) || +nvl(esp.descres, ´´)) as produto,
frn.codforne,
frn.fantasia,
max(prc.preco2) as preco2,
max(prc.precoalterna) as precoalterna,
sum(nvl(prc.preco2, 0) * (its.qtcomp * its.qtemb)) as totprbase,
sum(its.qtcomp * its.qtemb) as qtdtotal,
sum(nvl(its.vltotal, 0)) as vltot,
sum(prd.pesoliq * its.qtcomp * its.qtemb) as peso,
(Case
when ms.tipoped in (0, 2) then
count(distinct its.numnota)
end) as OCNF,
(Case
when ms.tipoped in (1) then
count(distinct its.numnota)
end) as OCPDV
From MOV_SAIDA ms,
MOV_ITSAIDA its,
CAD_PROD PRD,
CAD_ITPROD IP,
CAD_ESPEC ESP,
CAD_COR COR,
CAD_FORNE frn,
CAD_PRECO PRC,
CAD_FILIAL fil ,
(Select e.codprod, e.tpemb,
max(e.codembal) as codembal,
max(e.qtemb) as qtemb
From cad_embal e
Where e.tpemb = (Select min(e2.tpemb)
From cad_embal e2
Where e.codprod=e2.codprod)
Group by e.codprod, e.tpemb) e3
Where ms.codfil = its.codfil
and ms.tpnota = its.tpnota
and ms.numnota = its.numnota
and ms.serie = its.serie
and ms.dtnota = its.dtnota
and ms.codfil = fil.codfil
and its.coditprod = ip.coditprod
and ip.codprod = prd.codprod
and prd.codforne = frn.codforne
and ip.especific = esp.especific
and ip.codfam = esp.codfam
and ip.codcor = cor.codcor
and prc.coditprod = its.coditprod
and ip.codprod = e3.codprod
and its.status <> 9
and prc.codembal = 0
and prc.codfil = 1
and its.tpnota in (51, 133)
and its.dtnota between ´01/12/2006´ and ´31/12/2006´
Group by ms.tipoped,
ip.codprod,
its.coditprod,
ip.digitprod,
prd.descricao,
prd.unidade,
e3.qtemb,
frn.codforne,
frn.fantasia)
Group by codprod,
coditprod,
digitprod,
unidade,
qtembcomp,
produto,
codforne,
fantasia,
preco2,
precoalterna[/color:6611f358c0]
Collins
Curtidas 0
Respostas
Motta
08/01/2007
Já fez o plano de execução ?
As estatisticas estão atualizadas ?
Como está configurado o otimizador (custo ou regra) ?
Existem indices nas codições do where ?
As estatisticas estão atualizadas ?
Como está configurado o otimizador (custo ou regra) ?
Existem indices nas codições do where ?
GOSTEI 0