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

Popular posts from this blog

apache - PHP Soap issue while content length is larger -

asynchronous - Python asyncio task got bad yield -

javascript - Complete OpenIDConnect auth when requesting via Ajax -