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

Responder a