Om frågeplaneraren fattar dåliga beslut är det mest en av två saker:
1. Statistiken är felaktiga.
Kör du ANALYZE tillräckligt? Även populär i sin kombinerade form VACUUM ANALYZE . Om autovakuum är på (vilket är standard i dagens Postgres), ANALYZE körs automatiskt. Men tänk på:
- Rekommenderas vanlig VACUUM ANALYZE fortfarande under 9.1?
Om ditt bord är stort och datadistributionen är oregelbunden , vilket höjer default_statistics_target kan hjälpa. Eller snarare, ställ bara in statistikmålet för relevanta kolumner (de i WHERE eller JOIN klausuler i dina frågor, i princip):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Målet kan ställas in i intervallet 0 till 10000;
Kör ANALYZE igen efter det (på relevanta tabeller).
2. kostnadsinställningarna för planerare är uppskattningar avstängda.
Läs kapitlet Planer Kostnadskonstanter i manualen.
Titta på kapitlen default_statistics_target och random_page_cost på denna allmänt användbara PostgreSQL Wiki-sida.
Det finns många andra möjliga orsaker, men dessa är de absolut vanligaste.