On Mon, Oct 31, 2016 at 4:59 PM, Marcio Meneguzzi <
[email protected]> wrote:

> Boa tarde,
>
> Estou executando um select distinct em uma tabela com 3.5 milhoes de
> registros.
>
> Tabela e campos ficticios no select.
>
> select distinct data_itens from itens where codigo = 1 and
> data_itens between '01/01/2016' and '12/31/2016' order by data_itens
>
> O que ocorre é que a primeira vez que este select é executado, ele demora
> muito mais do que as demais vezes que ele for executado.
>
> *Primeira execução da QUERY:*
> "Unique  (cost=8.59..8.60 rows=1 width=4) (actual
> time=168565.216..168566.975 rows=233 loops=1)"
> "  ->  Sort  (cost=8.59..8.60 rows=1 width=4) (actual
> time=168565.211..168565.790 rows=14311 loops=1)"
> "        Sort Key: data_movimento"
> "        Sort Method: quicksort  Memory: 1055kB"
> "        ->  Index Scan using reproc_estoque on nota_item
>  (cost=0.56..8.58 rows=1 width=4) (actual time=157809.532..168551.829
> rows=14311 loops=1)"
> "              Index Cond: ((cod_emp = 1) AND (cod_fil = 1) AND
> (cod_reduzido_merc = 1))"
> "              Filter: ((data_movimento >= '2016-01-01'::date) AND
> (data_movimento <= '2016-12-31'::date))"
> "              Rows Removed by Filter: 132367"
> "Planning time: 59.849 ms"
> "Execution time: 168567.309 ms"
>
>
> *Segunda execução da QUERY:*
> "Unique  (cost=8.59..8.60 rows=1 width=4) (actual time=168.420..169.576
> rows=233 loops=1)"
> "  ->  Sort  (cost=8.59..8.60 rows=1 width=4) (actual
> time=168.419..168.784 rows=14311 loops=1)"
> "        Sort Key: data_movimento"
> "        Sort Method: quicksort  Memory: 1055kB"
> "        ->  Index Scan using reproc_estoque on nota_item
>  (cost=0.56..8.58 rows=1 width=4) (actual time=149.195..166.556 rows=14311
> loops=1)"
> "              Index Cond: ((cod_emp = 1) AND (cod_fil = 1) AND
> (cod_reduzido_merc = 1))"
> "              Filter: ((data_movimento >= '2016-01-01'::date) AND
> (data_movimento <= '2016-12-31'::date))"
> "              Rows Removed by Filter: 132367"
> "Planning time: 0.310 ms"
> "Execution time: 169.788 ms"
>
> Vejam a diferença do Planning time e execution time....
>
> O que estou fazendo de "errado" e como posso melhorar isto?
>

A diferença se dá pq na primeira execução o seu cache ainda está "frio", na
segunda execução o planejador de consultas pode ler as páginas de dados
direto da memória.


>
> Obrigado à todos.
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [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

Responder a