Hvis forespørgselsplanlæggeren træffer dårlige beslutninger, er det for det meste en af to ting:
1. statistikken er unøjagtige.
Kører du ANALYZE nok? Også populær i dens kombinerede form VACUUM ANALYZE . Hvis autovakuum er slået til (som er standard i moderne Postgres), ANALYZE køres automatisk. Men overvej:
- Anbefales regelmæssig VACUUM ANALYZE stadig under 9.1?
Hvis dit bord er stort og datadistribution er irregulær , hæver default_statistics_target kan hjælpe. Eller rettere sagt, sæt bare statistikmålet for relevante kolonner (dem i WHERE eller JOIN klausuler i dine forespørgsler, dybest set):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Målet kan indstilles i området 0 til 10000;
Kør ANALYZE igen derefter (på relevante tabeller).
2. omkostningsindstillingerne for planlæggerestimat er slået fra.
Læs kapitlet Planner Cost Constants i manualen.
Se kapitlerne default_statistics_target og random_page_cost på denne generelt nyttige PostgreSQL Wiki-side.
Der er mange andre mulige årsager, men disse er langt de mest almindelige.