Márcio, realmente, o upper e o coalesce impedem o uso do índice no campo. Sugiro você criar um índice com o campo já maiúsculo e remover o coalesce, já que me parece não ter muito uso substituir os nulos por '%' (provavelmente essa cláusula não tem efeito algum na sua consulta, a menos que ela seja gerada dinamicamente). Faça o mesmo para os demais campos e rode um analyze novamente, só para garantir. :)
CREATE INDEX ON emitente ((upper(nm_emitentecompleto))); Para resolver a cláusula em parc.vlr_valor, sugiro você isolar os valores nulos em uma condição própria, algo como: (parc.vl_valor between 0 and 999999999 or parc.vl_valor is null) No parc.vl_valor eu setei para not null e, tirando o coalesce ficou muito bom. Agora criei o índice na tabela uni_emitente (cfe o comando que vc passou acima), rodei analyze no banco todo, deixei a linha assim: emitente.nm_emitentecompleto like '%CONSUMIDOR%' and e não resolveu. Se comento esta linha fica bala. Pra ter uma idéia tá rodando a 20 minutos e não vai. Não consigo nem tirar o analyze pra enviar. Agora, apenas para entendimento: 1) Onde diz no explain analyze que o problema era com estas duas linhas? (como disse, sou bem leigo nisso e to tentando aprender - Talvez nem tem como saber por ele...); 2) Sabem o pq dele rodar bem na 9.0 e lento na 9.4 e 9.5? Passei por alto no relnotes, mas não encontrei nada... (talvez tenha visto, mas como não manjo muito, posso não ter entendido)
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral