On Thu, Dec 3, 2015 at 9:34 AM, Fernando Cambiaghi <cambia...@gmail.com> wrote:
> Bom dia pessoal, perdoem minha ignorância, mas alguém poderia me explicar > porque as duas consultas abaixo tem tempos de execução tão diferentes? > > EXPLAIN ANALYZE > SELECT MAX( dh_emissao ) > FROM nf_venda > WHERE dh_movimentacao_caixa >= ( getdate()::date - 2 ) > O getdate() vai executar uma vez para cada registro verificado. > > Aggregate (cost=98997.00..98997.01 rows=1 width=8) (actual > time=2268.764..2268.764 rows=1 loops=1) > -> Seq Scan on nf_venda (cost=0.00..98716.50 rows=112200 width=8) > (actual time=608.876..2268.601 rows=680 loops=1) > Filter: (dh_movimentacao_caixa >= ((getdate())::date - 2)) > Rows Removed by Filter: 343186 > Planning time: 0.289 ms > Execution time: 2268.817 ms > > __________________________________________________________ > > EXPLAIN ANALYZE > SELECT MAX( dh_emissao ) > FROM nf_venda > WHERE dh_movimentacao_caixa >= ( SELECT getdate()::date - 2 ) > Usando o SELECT, o getdate será executado uma única vez para toda consulta. > > Aggregate (cost=12505.24..12505.25 rows=1 width=8) (actual > time=0.704..0.704 rows=1 loops=1) > InitPlan 1 (returns $0) > -> Result (cost=0.00..0.27 rows=1 width=0) (actual time=0.072..0.072 > rows=1 loops=1) > -> Bitmap Heap Scan on nf_venda (cost=2145.97..12224.47 rows=112200 > width=8) (actual time=0.223..0.465 rows=681 loops=1) > Recheck Cond: (dh_movimentacao_caixa >= $0) > Heap Blocks: exact=41 > -> Bitmap Index Scan on idx_dh_movimentacao (cost=0.00..2117.92 > rows=112200 width=0) (actual time=0.206..0.206 rows=681 loops=1) > Index Cond: (dh_movimentacao_caixa >= $0) > Planning time: 0.396 ms > Execution time: 0.796 ms > Isso acontece quando vc faz um update setando o nextval de uma sequence, por exemplo. Se usar o SELECT, vai pegar o nextval uma única vez e setar ele para todos registros. Sem o select, para cada registro executará o nextval. Como a única diferença entre as duas situações é o uso do SELECT, acredito ser isso. Se me enganei me corrijam, também fiquei curioso com a diferença de tempo entre as duas consultas.
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral