Wenn der Abfrageplaner schlechte Entscheidungen trifft, ist das meistens eines von zwei Dingen:
1. Die Statistik sind ungenau.
Führen Sie ANALYZE
aus genügend? Auch beliebt in seiner kombinierten Form VACUUM ANALYZE
. Wenn die Selbstbereinigung aktiviert ist (was in modernen Postgres die Standardeinstellung ist), ANALYZE
wird automatisch ausgeführt. Aber bedenken Sie:
- Sind regelmäßige VACUUM ANALYZE unter 9.1 noch empfehlenswert?
Wenn Ihr Tisch groß ist und die Datenverteilung ist unregelmäßig , Erhöhen des default_statistics_target
kann helfen. Oder legen Sie einfach das Statistikziel für relevante Spalten fest (die in WHERE
oder JOIN
Klauseln Ihrer Abfragen, im Grunde):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Das Ziel kann im Bereich von 0 bis 10000 eingestellt werden;
Führen Sie ANALYZE
aus danach wieder (auf entsprechenden Tabellen).
2. Die Kosteneinstellungen für Planer-Schätzungen sind deaktiviert.
Lesen Sie das Kapitel Planer-Kostenkonstanten im Handbuch.
Sehen Sie sich die Kapitel default_statistics_target an und random_page_cost auf dieser allgemein hilfreichen PostgreSQL-Wiki-Seite.
Es gibt viele andere mögliche Gründe, aber dies sind bei weitem die häufigsten.