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*) Em 4 de abril de 2016 21:07, Márcio A. Sepp <mar...@zyontecnologia.com.br> escreveu: > > > 2016-04-04 17:47 GMT-03:00 Márcio A. Sepp <mar...@zyontecnologia.com.br>: > > > Bom dia, > > > > > > Atualizei um servidor que estava utilizando a versão 9.0 para a 9.4.7 > > e após atualização esta query passou a ficar extremamente lenta. > >............. > > > > > > Pelo que estou entendendo o problema está no fin_receber_cnt. Mas não > > to achando o furo. > > Observem que na versão 9.0 estava funcionando de forma satisfatoria. > > > > > Atualize as estatísticas com o comando ANALYZE. > http://www.postgresql.org/docs/9.4/interactive/sql-analyze.html > > Por favor, me explique como vc chegou a esta conclusão? diz algo aí que as > estatísticas estão desatualizadas? (eu não manjo muito da saída do analyze > e to me batendo nisso a horas). > Mas eu havia feito todas as manutenções antes de enviar a saída do analyze > e inclusive peguei o banco e subi numa máquina minha e continua na mesma > lentidão. > > Talvez precise que eu envie mais alguma informação pra ajudar? > > > > O tempo estimado e o tempo real são muito divergentes, talvez por isso a > sugestão do analyze, e também porque é praxe que as estatísticas estejam > desatualizadas. > > Utilize [1] para facilitar a visualização, se possível, e cole a URL do > seu explain. > > O problema parece começar em alguns loops e filtros sem índices, mas será > melhor de visualizar após nos passar o link do explain. > > Eu tentei utilizando o resultado que você passou e não deu certo. > > > > [1] - http://explain.depesz.com/ > > > > Rodei analyze (no banco que subi aqui) agora. > > > > > > http://explain.depesz.com/s/b55L > > > > > > > > Fazendo testes, percebi que o problema está nestas duas linhas aqui: > > upper(coalesce(emitente.nm_emitentecompleto, '%')) like > upper('%consumidor%') and > > coalesce(parc.vl_valor, 0) between coalesce(0, 0) and > coalesce(999999.99, 999999999) and > > > > Comentando elas o retorno fica em 2 ms, o que é aceitável. > > Tentei retirar os operadores upper e coalesce destas linhas, mas ainda > continua lento. Fui até as tabelas emitente e parc e criei indices nestas > colunas, mas tbm não resolveu. Se alguém puder ajudar, agradeço muito. > > > > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral