そうでなければ順次スキャンの実行を要求されるのに、Postgres にインデックスの使用を強制するにはどうすればよいでしょうか?
ベストアンサー1
多くのデータベースに見られる一般的な「インデックスヒント」機能についてお尋ねだと思いますが、PostgreSQL にはそのような機能はありません。これは PostgreSQL チームが意図的に決めたことです。その理由と代わりにできることについての概要は、次のリンク先で確認できます。ここ理由は基本的に、これはパフォーマンス ハックであり、データが変更されると後でより多くの問題を引き起こす傾向があるのに対し、PostgreSQL のオプティマイザは統計に基づいてプランを再評価できるためです。言い換えると、今日は良いクエリ プランであっても、常に良いクエリ プランであるとは限らず、インデックス ヒントによって常に特定のクエリ プランが強制されます。
テストに便利な非常に鈍いハンマーとして、enable_seqscan
およびenable_indexscan
パラメータを使用できます。参照:
これらは継続的な生産には適していませんクエリプランの選択に問題がある場合は、クエリパフォーマンスの問題を追跡するためのドキュメントenable_
パラメータを設定してそのまま放置しないでください。
インデックスを使用する特別な理由がない限り、Postgres は正しい選択を行っている可能性があります。なぜでしょうか?
- 小さなテーブルの場合は、順次スキャンを実行する方が高速です。
- Postgres は、データ型が適切に一致しない場合にはインデックスを使用しないため、適切なキャストを含める必要がある場合があります。
- プランナーの設定に問題がある可能性があります。