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.