Jeśli planer zapytań podejmuje złe decyzje, jest to najczęściej jedna z dwóch rzeczy:
1. statystyki są niedokładne.
Czy uruchamiasz ANALYZE
dość? Popularny również w postaci połączonej VACUUM ANALYZE
. Jeśli funkcja automatycznego odkurzania jest włączona (co jest ustawieniem domyślnym we współczesnym Postgresie), ANALYZE
jest uruchamiany automatycznie. Ale rozważ:
- Czy regularna ANALIZA PRÓŻNI jest nadal zalecana w wersji 9.1?
Jeśli Twój stół jest duży a dystrybucja danych jest nieregularna , podnosząc default_statistics_target
może pomóc. Albo po prostu ustaw docelowe statystyki dla odpowiednich kolumn (te w WHERE
lub JOIN
klauzule twoich zapytań, w zasadzie):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Cel można ustawić w zakresie od 0 do 10000;
Uruchom ANALYZE
ponownie po tym (na odpowiednich tabelach).
2. Ustawienia kosztów ponieważ szacunki planisty są wyłączone.
Przeczytaj rozdział Planner Cost Constants w podręczniku.
Spójrz na rozdziały default_statistics_target i losowa_strona_koszt na tej ogólnie przydatnej stronie Wiki PostgreSQL.
Istnieje wiele innych możliwych powodów, ale zdecydowanie są to najczęstsze.