On 31-10-2016 15:59, Marcio Meneguzzi wrote: [Você perguntou no privado mas a sua dúvida pode servir para outros aqui]
> select distinct data_itens from itens where codigo = 1 and > data_itens between '01/01/2016' and '12/31/2016' order by data_itens > Você não mostrou a quantidade de registros mas como o outro colega comentou, um índice em data_itens pode ajudar se a seletividade for boa (note que 'Rows Removed by Filter' é alto). > O que estou fazendo de "errado" e como posso melhorar isto? > Sim. Mas é preciso trazer os dados do disco para a cache do PostgreSQL. Provavelmente você reiniciou o serviço ou o sistema operacional. No caso do serviço, você perde a cache do postgres. No caso do sistema operacional, você perde tanto a cache do postgres quanto a cache feita pelo sistema operacional. A primeira execução vai ser lenta porque os dados estão no disco (os dados precisam ir para cache do SO e cache do postgres). O postgres só manipula dados que estão na sua cache; se eles não estão lá tem que ser colocados lá (a partir da cache do SO, que é na memória, ou do disco). Você não informou a versão, mas o pg_prewarm [1] (>= 9.4) pode ajudar na tarefa de popular a cache antes que o acesso ao sistema seja liberado. Aliado a isso, você pode usar o pg_hibernator [2] para persistir a cache do postgres se tiver que reiniciar o serviço ou mesmo o servidor. Uma outra opção é o pgfincore [3] que lida somente com a cache do sistema operacional. [1] https://www.postgresql.org/docs/9.6/static/pgprewarm.html [2] https://github.com/gurjeet/pg_hibernator [3] https://github.com/klando/pgfincore -- Euler Taveira Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
