PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como forço o Postgres a usar um índice específico?


Supondo que você esteja perguntando sobre o recurso comum de "sugestão de índice" encontrado em muitos bancos de dados, o PostgreSQL não fornece esse recurso. Esta foi uma decisão consciente tomada pela equipe do PostgreSQL. Uma boa visão geral do porquê e do que você pode fazer pode ser encontrada aqui. As razões são basicamente que é um hack de desempenho que tende a causar mais problemas posteriormente à medida que seus dados mudam, enquanto o otimizador do PostgreSQL pode reavaliar o plano com base nas estatísticas. Em outras palavras, o que pode ser um bom plano de consulta hoje provavelmente não será um bom plano de consulta para sempre, e as dicas de índice forçam um plano de consulta específico para sempre.

Como um martelo muito sem corte, útil para testes, você pode usar o enable_seqscan e enable_indexscan parâmetros. Ver:
  • Examinando o uso do índice
  • enable_ parâmetros

Estes não são adequados para uso em produção contínua . Se você tiver problemas com a escolha do plano de consulta, consulte a documentação para rastrear problemas de desempenho de consulta. Não basta definir enable_ params e ir embora.

A menos que você tenha uma boa razão para usar o índice, o Postgres pode estar fazendo a escolha correta. Por quê?
  • Para tabelas pequenas, é mais rápido fazer verificações sequenciais.
  • O Postgres não usa índices quando os tipos de dados não correspondem corretamente, talvez seja necessário incluir conversões apropriadas.
  • As configurações do seu planejador podem estar causando problemas.

Veja também este post antigo do grupo de notícias.