oracle - Oracle11g: Improve performance of sum function and group by -
i have query:
select case when to_char(a.data_posicao_carteira, 'yyyymmdd') <= '20110513' a.codigo_favorecido else a.codigo_favorecido_original end codigo_favorecido, '13/05/11' posicao_carteira, b.banco, b.agencia, b.conta, sum(nvl(case when tv.valor_parcela = 0 tv.valor_venda else tv.valor_parcela end, 0)) + sum(nvl(case when tav.valor_parcela = 0 tav.valor_anulacao else tav.valor_parcela end, 0)) valor_bruto, sum(nvl(case when tv.valor_parcela = 0 tv.valor_desconto else tv.valor_parcela_desconto end, 0)) + sum(nvl(case when tav.valor_parcela = 0 tav.valor_desconto else tav.valor_parcela_desconto end, 0)) valor_comissao, sum(nvl(case when tv.valor_parcela = 0 tv.valor_venda else tv.valor_parcela end, 0)) + sum(nvl(case when tav.valor_parcela = 0 tav.valor_anulacao else tav.valor_parcela end, 0)) + sum(nvl(case when tv.valor_parcela = 0 tv.valor_desconto else tv.valor_parcela_desconto end, 0)) + sum(nvl(case when tav.valor_parcela = 0 tav.valor_desconto else tav.valor_parcela_desconto end, 0)) valor_liquido, d.nome_produto descricao_produto, e.cnpj_favorecido cnpj, e.nome_favorecido, g.codigo_empresa_grupo, trunc(a.data_repasse_calculada) data_repasse_calculada, g.descricao_empresa_grupo tb_transacao left join tb_conta_favorecido b on b.codigo_conta_favorecido = case when to_char(a.data_posicao_carteira, 'yyyymmdd') <= '20110513' a.codigo_conta_favorecido else a.codigo_conta_favorecido_orig end left join tb_transacao_venda tv on a.codigo_transacao = tv.codigo_transacao left join tb_transacao_anulacao_venda tav on a.codigo_transacao = tav.codigo_transacao left join tb_estabelecimento c on a.codigo_estabelecimento = c.codigo_estabelecimento left join tb_produto d on a.codigo_produto = d.codigo_produto left join tb_favorecido e on e.codigo_favorecido = case when to_char(a.data_posicao_carteira, 'yyyymmdd') <= '20110513' a.codigo_favorecido else a.codigo_favorecido_original end left join tb_empresa_subgrupo f on c.codigo_empresa_subgrupo = f.codigo_empresa_subgrupo left join tb_empresa_grupo g on f.codigo_empresa_grupo = g.codigo_empresa_grupo a.tipo_transacao in ('cv', 'av') , a.status_transacao <> 6 group case when to_char(a.data_posicao_carteira, 'yyyymmdd') <= '20110513' a.codigo_favorecido else a.codigo_favorecido_original end, '13/05/11', b.banco, b.agencia, b.conta, d.nome_produto, e.cnpj_favorecido, e.nome_favorecido, g.codigo_empresa_grupo, a.data_repasse_calculada, g.descricao_empresa_grupo order e.cnpj_favorecido, e.nome_favorecido, b.conta, b.agencia, b.banco
this query taking 30s. when removed sum functions, time return decreased 9s. group by.
i tried remove order by, create indexes. didn't work
any idea improve sum function ?
thanks
ps: type of numeric columns number(14,2)
Comments
Post a Comment