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
