Tem algumas coisas que podem ser melhoradas só olhando nesse plano. Mas acho melhor ir eliminando uma por vez. Aqui vai uma:
On Wed, Jul 9, 2014 at 2:30 PM, Bruno Silva <[email protected]> wrote: > -> Index Scan using ix_movimentacao_04 on > movimentacao movjulg (cost=0.56..52676472.59 rows=16518832 width=16) > (actual time=359.452..39891.966 rows=216 loops=1) > Index Cond: (dtamovimento <= '2013-12-31 > 23:59:59'::timestamp without time zone) > Filter: ((bolcancelado)::text <> 'S'::text) > Rows Removed by Filter: 195962 > Buffers: shared hit=11589 read=19548 > I/O Timings: read=39666.394 > Nesse ponto, me parece que um índice parcial ajudaria muito. Se a consulta sempre usar `bolcancelado <> 'S'`, você pode criar o seguinte índice: CREATE INDEX ... ON movimentacao(dtamovimento) WHERE bolcancelado <> 'S' É possível também algumas melhorias alterando a consulta. Provavelmente adicionando um LIMIT 20 (que parece ter na parte de fora) na consulta à movimentacao, e o colocando em uma CTE ajudaria bastante (assumindo que acertei quanto ao LIMIT). Me parece que essa tabela está particionada, mas a chave não é usada nessa consulta. Talvez um segundo nível de particionamento por data seja interessante, mas eu deixaria isso para depois (dada a complicação e as melhorias que ainda podem ser exploradas sem isso). Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
