Als de queryplanner slechte beslissingen neemt, is dat meestal een van de volgende twee dingen:
1. De statistieken zijn onjuist.
Voer je ANALYZE
. uit? genoeg? Ook populair in zijn gecombineerde vorm VACUUM ANALYZE
. Als autovacuüm is ingeschakeld (wat de standaard is in het moderne Postgres), ANALYZE
wordt automatisch uitgevoerd. Maar denk aan:
- Wordt regelmatige VACUMANALYSE nog steeds aanbevolen onder 9.1?
Als uw tafel groot is en de gegevensdistributie is onregelmatig , het verhogen van de default_statistics_target
kan helpen. Of liever, stel gewoon het statistische doel in voor relevante kolommen (die in WHERE
of JOIN
clausules van uw zoekopdrachten, in principe):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Het doel kan worden ingesteld in het bereik van 0 tot 10000;
Voer ANALYZE
uit daarna opnieuw (op relevante tabellen).
2. De kosteninstellingen voor planner schattingen zijn uitgeschakeld.
Lees het hoofdstuk Planner Kostenconstanten in de handleiding.
Bekijk de hoofdstukken default_statistics_target en willekeurige_paginakosten op deze over het algemeen nuttige PostgreSQL Wiki-pagina.
Er zijn veel andere mogelijke redenen, maar dit zijn verreweg de meest voorkomende.