A parte mais cara da sua consulta, de acordo com o explain, é:
WHERE (movjulg.bolcancelado IS FALSE
AND movjulg.dtamovimento <= '2013-12-31 23:59:59-03')
Poderia verificar se existem índices nessas colunas? caso haja, a
distribuição estatística dos dados nelas pode afetar o plano também.
Mostre-nos mais detalhes, por favor, dessa tabela e essas colunas.
Flávio, seguem os detalhes, desculpe a forma de apresentação da estrutura:
(...)
Cortei a definição da tabela aqui.
Indexes:
"ix_movimentacao_04" btree (pk_processo, intmunicipiocomarcaid,
dtamovimento_old) WHERE dtamovimento_old IS NOT NULL
"ix_movimentacao_06" btree (intmunicipiocomarcaid, pk_processo,
inttipomovimentoid)
"ix_movimentacao_08" btree (pk_processo, intmunicipiocomarcaid,
intvaraid, inttipomovimentoid)
"ix_movimentacao_09" btree (dtamovimento) WHERE bolcancelado IS
FALSE, tablespace "idxs"
"ix_movimentacao_10" btree (dtamovimento DESC) WHERE bolcancelado
IS FALSE
"ix_movimentacao_11" btree (intmunicipiocomarcaid, pk_processo,
inttipomovimentoid, dtamovimento DESC) WHERE bolcancelado IS FALSE
Note que os índices ix_movimentacao_09 e ix_movimentacao_10, apesar de
ligeiramente diferentes, para o seu filtro eles representam a mesma
coisa, só testando muito pra saber se a ordem deles afeta algum tempo ou
não.
Todavia, seu seqscan me parece fadado ao fato de não haver nenhum índice
sobre a coluna bolcancelado.
Talvez, se você fizer um só índice incluindo ambas as colunas, e sem
fazer um índice filtrado, você obtenha um melhor resultado, exemplo bem
simples:
CREATE INDEX ix_movimentacao_12 ON movjulg (dtamovimento, bolcancelado);
[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral