Prezados, Procuro por links com tutorias aborando o "explain analyze". Como interpretar cada linha apresentada por ele. Alguém recomenda algum site ?
Tenho uma consulta aqui com 1,5 minuto de duração e gostaria de tentar otimiza-la Ao executar o explain analyze não entendi bem onde atuar para melhorar Segue abaixo o sql e o explain. Toda ajuda será bem-vinda ### explain analyze explain analyze select distinct npd.exercicio , npd.unidadegestora , npd.numero , npd.numeronld , nld.numero as nldorigem , nld.numeroned , ned.numero as nedorigem , ned.numeronpf , npf.numero as npforigem , npf.grupo_fin as grupofin , orm.cod_tp_orcamento as tipcre , npd.classiforcamreduz , npd.classiforcamcompl , npd.credor , npd.nomecredor , npd.statusmovbancario , npd.natureza , nld.numeroned as numemp , npd.codigoretencao , npd.dataemissao , npd.dt_etl , npd.servicobancario , npd.bancobeneficiario as banco , npd.agenciabeneficiario as agencia , npd.contabeneficiario as conta , npd.efeito , substring(ned.classiforcamcompl from 24 for 8) as natdespesa , substring(ned.classiforcamcompl from 33 for 2) as fonterec , npd.valor as valor , npd.cpfcnpjcredor , cast(npd.numeronld as integer) as "numliq" , npd.numeronpf , npd.numeronpdordinario , exerciciorestosapagar from sefaz_ws.npd_nota_pagamento_despesa npd left join sefaz_ws.nld_nota_liquidacao_despesa nld on (npd.exercicio = nld.exercicio and npd.unidadegestora = nld.unidadegestora and npd.numeronld = nld.numero) left join sefaz_ws.ned_nota_empenho_despesa ned on (nld.exercicio = ned.exercicio and nld.unidadegestora = ned.unidadegestora and nld.numeroned = ned.numero) left join sefaz_ws.npf_nota_programacao_financeira npf on (ned.exercicio = npf.exercicio and ned.unidadegestora = npf.unidadegestora and ned.numeronpf = npf.numero) left join sefaz_ws.orcamentario_mensal orm on (npd.exercicio = orm.exercicio and npd.unidadegestora = orm.unidadegestora and orm.classif_orcam_reduz = CAST(ned.classiforcamreduz AS integer)) order by npd.exercicio, npd.unidadegestora, npd.numero #### resultado do explain analyze "Unique (cost=358689.48..389491.06 rows=352018 width=287) (actual time=101865.980..107098.130 rows=352018 loops=1)" " -> Sort (cost=358689.48..359569.53 rows=352018 width=287) (actual time=101865.979..103271.970 rows=2631834 loops=1)" " Sort Key: npd.exercicio, npd.unidadegestora, npd.numero, npd.numeronld, nld.numero, nld.numeroned, ned.numero, ned.numeronpf, npf.numero, npf.grupo_fin, orm.cod_tp_orcamento, npd.classiforcamreduz, npd.classiforcamcompl, npd.credor, npd.nomecredor, npd.statusmovbancario, npd.natureza, npd.codigoretencao, npd.dataemissao, npd.dt_etl, npd.servicobancario, npd.bancobeneficiario, npd.agenciabeneficiario, npd.contabeneficiario, npd.efeito, ("substring"((ned.classiforcamcompl)::text, 24, 8)), ("substring"((ned.classiforcamcompl)::text, 33, 2)), npd.valor, npd.cpfcnpjcredor, npd.numeronpf, npd.numeronpdordinario, nld.exerciciorestosapagar" " Sort Method: external merge Disk: 731704kB" " -> Hash Left Join (cost=104246.16..279334.81 rows=352018 width=287) (actual time=1322.332..6808.805 rows=2631834 loops=1)" " Hash Cond: ((npd.exercicio = orm.exercicio) AND (npd.unidadegestora = orm.unidadegestora) AND ((ned.classiforcamreduz)::integer = orm.classif_orcam_reduz))" " -> Merge Left Join (cost=100158.37..188918.69 rows=352018 width=290) (actual time=1295.093..3653.514 rows=352018 loops=1)" " Merge Cond: ((npd.unidadegestora = nld.unidadegestora) AND (npd.exercicio = nld.exercicio) AND (npd.numeronld = nld.numero))" " -> Index Scan using npd_nota_pagamento_despesa_idx_gestora_exercicio_numeronld on npd_nota_pagamento_despesa npd (cost=0.00..82171.24 rows=352018 width=215) (actual time=0.009..1846.104 rows=352018 loops=1)" " -> Sort (cost=100158.37..100655.53 rows=198865 width=83) (actual time=1295.075..1355.207 rows=364791 loops=1)" " Sort Key: nld.unidadegestora, nld.exercicio, nld.numero" " Sort Method: quicksort Memory: 32689kB" " -> Merge Left Join (cost=54937.60..82656.83 rows=198865 width=83) (actual time=749.878..980.454 rows=198865 loops=1)" " Merge Cond: ((nld.unidadegestora = ned.unidadegestora) AND (nld.exercicio = ned.exercicio) AND (nld.numeroned = ned.numero))" " -> Index Scan using nld_nota_liquidacao_despesa_idx_gestora_exercicio_numeroned on nld_nota_liquidacao_despesa nld (cost=0.00..23405.46 rows=198865 width=21) (actual time=0.008..77.818 rows=198865 loops=1)" " -> Sort (cost=54937.55..55372.62 rows=174029 width=70) (actual time=749.864..771.572 rows=200712 loops=1)" " Sort Key: ned.unidadegestora, ned.exercicio, ned.numero" " Sort Method: quicksort Memory: 30617kB" " -> Merge Right Join (cost=28198.62..39789.22 rows=174029 width=70) (actual time=363.928..494.100 rows=174029 loops=1)" " Merge Cond: ((npf.exercicio = ned.exercicio) AND (npf.unidadegestora = ned.unidadegestora) AND (npf.numero = ned.numeronpf))" " -> Index Scan using npf_nota_programacao_financeira_idx on npf_nota_programacao_financeira npf (cost=0.00..7688.10 rows=100339 width=15) (actual time=0.008..30.949 rows=100339 loops=1)" " -> Sort (cost=28198.62..28633.69 rows=174029 width=63) (actual time=363.906..384.312 rows=174029 loops=1)" " Sort Key: ned.exercicio, ned.unidadegestora, ned.numeronpf" " Sort Method: quicksort Memory: 30617kB" " -> Seq Scan on ned_nota_empenho_despesa ned (cost=0.00..13050.29 rows=174029 width=63) (actual time=0.003..63.878 rows=174029 loops=1)" " -> Hash (cost=2991.47..2991.47 rows=62647 width=14) (actual time=27.200..27.200 rows=62647 loops=1)" " Buckets: 8192 Batches: 1 Memory Usage: 2937kB" " -> Seq Scan on orcamentario_mensal orm (cost=0.00..2991.47 rows=62647 width=14) (actual time=0.006..15.844 rows=62647 loops=1)" "Total runtime: 107298.538 ms" -- Atenciosamente, Luiz Henrique "In Medium Est Virtus!" "A Virtude está no meio!"
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral