多くのデータベースに見られる一般的な「インデックスヒント」機能について質問していると仮定すると、PostgreSQLはそのような機能を提供しません。これは、PostgreSQLチームによって行われた意識的な決定でした。代わりに何ができるのか、そして何ができるのかについての概要は、ここにあります。その理由は基本的に、データが変更されると後でさらに問題を引き起こす傾向があるパフォーマンスハックであるのに対し、PostgreSQLのオプティマイザは統計に基づいて計画を再評価できるためです。言い換えると、今日の優れたクエリプランは、常に優れたクエリプランではない可能性があり、インデックスヒントは、特定のクエリプランを常に強制します。
テストに役立つ非常に鈍いハンマーとして、enable_seqscan
を使用できます。 およびenable_indexscan
パラメーター。参照:
- インデックスの使用状況を調べる
-
enable_
パラメータ
これらは継続的な本番環境での使用には適していません 。クエリプランの選択に問題がある場合は、クエリパフォーマンスの問題を追跡するためのドキュメントを参照してください。 enable_
を設定するだけではいけません paramsと離れて歩きます。
インデックスを使用する非常に正当な理由がない限り、Postgresが正しい選択をしている可能性があります。なぜですか?
- 小さなテーブルの場合、順次スキャンを実行する方が高速です。
- データ型が適切に一致しない場合、Postgresはインデックスを使用しません。適切なキャストを含める必要がある場合があります。
- プランナーの設定が問題を引き起こしている可能性があります。
この古いニュースグループの投稿も参照してください。