クエリプランナーが悪い決定を下した場合、それは主に2つのことのいずれかです。
1。 統計 不正確です。
ANALYZE
を実行しますか 足りる? VACUUM ANALYZE
を組み合わせた形でも人気 。自動バキュームがオンになっている場合(これは現代のPostgresのデフォルトです)、ANALYZE
自動的に実行されます。ただし、次のことを考慮してください:
- 通常のVACUUMANALYZEは9.1でも推奨されていますか?
テーブルが大きい場合 データの配布は不規則です 、default_statistics_target
を上げる 役立つかもしれません。むしろ、関連する列(WHERE
の列)の統計ターゲットを設定するだけです。 またはJOIN
クエリの句、基本的に):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
ターゲットは0から10000の範囲で設定できます;
ANALYZE
を実行します その後も(関連するテーブルで)。
2。 コスト設定 プランナーの見積もりはオフです。
マニュアルの「プランナーコスト定数」の章をお読みください。
default_statistics_targetの章をご覧ください およびrandom_page_cost この一般的に役立つPostgreSQLWikiページで。
他にも多くの理由が考えられますが、これらが最も一般的な理由です。