Uellinton A tabela ned_nota_empenho_despesa tem 174.000 A tabela orcamentario_mensal tem 63.000 Ambas com indice
2017-09-22 10:50 GMT-03:00 Uellinton Mendes <[email protected]>: > Bom Dia Luiz, > > Já tentou usar essa ferramenta online? > > https://explain.depesz.com/ > > É muito legal. > > Duvida, quantos registros tem mesmo em ned_nota_empenho_despesa e > orcamentario_mensal? > > Essas duas tabelas estão sem indices? > > *Uellinton Mendes* > 11-9-9167-3524 [OI] > > Em 22/09/2017 10:39, Luiz Henrique escreveu: > > 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 > [email protected]https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Atenciosamente, Luiz Henrique "In Medium Est Virtus!" "A Virtude está no meio!"
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
