Caros amigos do forum estou com problema de performance neste "pequena query" (rs) será quem alguém consegue enxergar algo para me ajudar a melhorar ????
select sum(dif_res) RESIDENCIAL, sum(dif_com) COMERCIAL, sum(dif_ind) INDUSTRIAL, sum(dif_pub) PUBLICO
from (select ct_refaturadas.ident_lig,
ct_refaturadas.data_ref, ct_refaturadas.DATA_EMISSAO, ct_geral.total as total_anterior,
ct_refaturadas.total total_atual, ct_geral.val_extra_antes, ct_refaturadas.val_extra_depois,
(com_post * val_por_eco_dep) - (com_ant * val_por_eco_ant) dif_com,
(res_post * val_por_eco_dep) - (res_ant * val_por_eco_ant) dif_res,
(ind_post * val_por_eco_dep) - (ind_ant * val_por_eco_ant) dif_ind,
(pub_post * val_por_eco_dep) - (pub_ant * val_por_eco_ant) dif_pub,
ct_geral.cod_extra
from (select extra.cod_extra,
sum(extra.valor) val_extra_antes, conta.total, conta.ident_conta, conta.data_ref,
conta.ident_lig, conta.data_emissao,
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) + nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)) as tot_economias,
trunc(sum(extra.valor) /
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) +
nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)), 2) val_por_eco_ant,
nvl(conta.com_ct, 0) com_ant,
nvl(conta.res_ct, 0) res_ant,
nvl(conta.ind_ct, 0) ind_ant,
nvl(conta.pub_ct, 0) pub_ant
From extra, Conta
Where extra.ident_conta = Conta.ident_conta
and extra.cod_extra = 0
and conta.in_original = 1
and conta.cod_tipo_nf in (1, 5)
and conta.cod_situacao_nf = 2
group by extra.cod_extra, conta.total,
conta.ident_conta, conta.data_ref, conta.ident_lig, conta.data_emissao,
nvl(conta.com_ct, 0), nvl(conta.res_ct, 0), nvl(conta.ind_ct, 0), nvl(conta.pub_ct, 0)
order by conta.ident_lig) ct_geral,
(select extra.cod_extra, sum(extra.valor) val_extra_depois, conta.total, conta.ident_conta_ant,
conta.data_ref, conta.ident_lig, CONTA.DATA_EMISSAO,
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) + nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)) as tot_economias,
trunc(sum(extra.valor) / (nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) + nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)),2) val_por_eco_dep,
nvl(conta.com_ct, 0) com_post, nvl(conta.res_ct, 0) res_post, nvl(conta.ind_ct, 0) ind_post, nvl(conta.pub_ct, 0) pub_post
From extra, Conta
Where extra.ident_conta = Conta.ident_conta
and extra.cod_extra = 0
and conta.in_original = 0
AND CONTA.COD_SITUACAO_NF IN (1, 3, 4)
and conta.cod_tipo_nf IN (1, 5)
group by extra.cod_extra, conta.total, conta.ident_conta_ant, conta.data_ref, conta.ident_lig, conta.data_emissao,
nvl(conta.com_ct, 0), nvl(conta.res_ct, 0), nvl(conta.ind_ct, 0), nvl(conta.pub_ct, 0)
order by conta.ident_lig) ct_refaturadas
Where ct_refaturadas.data_ref = ct_geral.data_ref
AND ct_refaturadas.IDENT_LIG = ct_geral.IDENT_LIG
and ct_refaturadas.DATA_EMISSAO between To_Date('','DD/MM/YYYY') and To_Date('','DD/MM/YYYY'))
Tuning SQL
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Com a query assim bagunçada será difícil de se achar. Vou te fazer um favor Abaixo, vou colocar sua query INDENTADA!
Dica: faça um Explain dessa consulta, senão fica difícil adivinhar.
Dica: faça um Explain dessa consulta, senão fica difícil adivinhar.
select sum(dif_res) RESIDENCIAL,
sum(dif_com) COMERCIAL,
sum(dif_ind) INDUSTRIAL,
sum(dif_pub) PUBLICO
from (select ct_refaturadas.ident_lig,
ct_refaturadas.data_ref,
ct_refaturadas.DATA_EMISSAO,
ct_geral.total as total_anterior,
ct_refaturadas.total total_atual,
ct_geral.val_extra_antes,
ct_refaturadas.val_extra_depois,
(com_post * val_por_eco_dep) - (com_ant * val_por_eco_ant) dif_com,
(res_post * val_por_eco_dep) - (res_ant * val_por_eco_ant) dif_res,
(ind_post * val_por_eco_dep) - (ind_ant * val_por_eco_ant) dif_ind,
(pub_post * val_por_eco_dep) - (pub_ant * val_por_eco_ant) dif_pub,
ct_geral.cod_extra
from (select extra.cod_extra,
sum(extra.valor) val_extra_antes,
conta.total,
conta.ident_conta,
conta.data_ref,
conta.ident_lig,
conta.data_emissao,
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) +
nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)) as tot_economias,
trunc(sum(extra.valor) /
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) +
nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)),
2) val_por_eco_ant,
nvl(conta.com_ct, 0) com_ant,
nvl(conta.res_ct, 0) res_ant,
nvl(conta.ind_ct, 0) ind_ant,
nvl(conta.pub_ct, 0) pub_ant
From extra, Conta
Where extra.ident_conta = Conta.ident_conta
and extra.cod_extra = 0
and conta.in_original = 1
and conta.cod_tipo_nf in (1, 5)
and conta.cod_situacao_nf = 2
group by extra.cod_extra,
conta.total,
conta.ident_conta,
conta.data_ref,
conta.ident_lig,
conta.data_emissao,
nvl(conta.com_ct, 0),
nvl(conta.res_ct, 0),
nvl(conta.ind_ct, 0),
nvl(conta.pub_ct, 0)
order by conta.ident_lig) ct_geral,
(select extra.cod_extra,
sum(extra.valor) val_extra_depois,
conta.total,
conta.ident_conta_ant,
conta.data_ref,
conta.ident_lig,
CONTA.DATA_EMISSAO,
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) +
nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)) as tot_economias,
trunc(sum(extra.valor) /
(nvl(conta.com_ct, 0) + nvl(conta.res_ct, 0) +
nvl(conta.ind_ct, 0) + nvl(conta.pub_ct, 0)),
2) val_por_eco_dep,
nvl(conta.com_ct, 0) com_post,
nvl(conta.res_ct, 0) res_post,
nvl(conta.ind_ct, 0) ind_post,
nvl(conta.pub_ct, 0) pub_post
From extra, Conta
Where extra.ident_conta = Conta.ident_conta
and extra.cod_extra = 0
and conta.in_original = 0
AND CONTA.COD_SITUACAO_NF IN (1, 3, 4)
and conta.cod_tipo_nf IN (1, 5)
group by extra.cod_extra,
conta.total,
conta.ident_conta_ant,
conta.data_ref,
conta.ident_lig,
conta.data_emissao,
nvl(conta.com_ct, 0),
nvl(conta.res_ct, 0),
nvl(conta.ind_ct, 0),
nvl(conta.pub_ct, 0)
order by conta.ident_lig) ct_refaturadas
Where ct_refaturadas.data_ref = ct_geral.data_ref
AND ct_refaturadas.IDENT_LIG = ct_geral.IDENT_LIG
and ct_refaturadas.DATA_EMISSAO between To_Date('', 'DD/MM/YYYY') and
To_Date('', 'DD/MM/YYYY'))
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes