On 14-07-2014 13:50, Listas Diversas wrote:
> Caros colegas, boa tarde, preciso forçar a utilização de um índice
> específico para uma determinada tabela, no Oracle eu utilizava "SELECT /*+
> INDEX ({table} {indice}) */ ....", mas não encontrei nada relacionado para
> o postgresql, alguém pode me ajudar ?, a minha versão é a 9.0.
> Desde já grato pela atenção.
>
Essa é uma dúvida recorrente, e "hints do otimizador" é uma das
funcionalidades indesejadas [1]. Os desenvolvedores acreditam que o
planejador deve ser esperto o suficiente para determinar o melhor plano
de execução para vc.
Claro que o planejador do PostgreSQL não é perfeito e pode ser que em
seu cenário esteja gerando um plano ruim, mas para antes de mais nada
verifique se as estatísticas de suas tabelas estão atualizadas (rode um
ANALYZE [2] em cada uma para garantir).
Lembre-se que se sua query retornar muitas linhas de uma tabela (mais da
metade, se não me engano) o planejador irá gerar um seqscan que é mais
barato do que usar índice.
Se mesmo assim vc ainda tem problemas, o que vc ainda pode fazer é
desativar alguns métodos de scan/join:
enable_bitmapscan = on
enable_hashagg = on
enable_hashjoin = on
enable_indexscan = on
enable_indexonlyscan = on
enable_material = on
enable_mergejoin = on
enable_nestloop = on
enable_seqscan = on
enable_sort = on
enable_tidscan = on
Veja mais informações em [3] e [4].
E ainda existe a possibilidade de vc escrever um código para utilizar os
hooks do "executor". Veja essa apresentação [5]. Lembro de ter visto em
algum lugar alguém que escreveu uma extensão para simular algum nivel de
hint mas não lembro onde e também não encontrei. Se alguém souber favor
colaborar.
Att,
[1] https://wiki.postgresql.org/wiki/Todo#Features_We_Do_Not_Want
[2] http://www.postgresql.org/docs/current/static/sql-analyze.html
[3] http://www.postgresql.org/docs/current/static/runtime-config-query.html
[4] http://blog.2ndquadrant.com/hinting_at_postgresql/
[5] http://wiki.postgresql.org/images/e/e3/Hooks_in_postgresql.pdf
--
Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral