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.