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.