PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verhindern Sie, dass PostgreSQL manchmal einen schlechten Abfrageplan auswählt

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.