sql >> Databasteknik >  >> RDS >> PostgreSQL

Håll PostgreSQL från att ibland välja en dålig frågeplan

Om frågeplaneraren fattar dåliga beslut är det mest en av två saker:

1. Statistiken är felaktiga.

Kör du ANALYZE tillräckligt? Även populär i sin kombinerade form VACUUM ANALYZE . Om autovakuum är på (vilket är standard i dagens Postgres), ANALYZE körs automatiskt. Men tänk på:

  • Rekommenderas vanlig VACUUM ANALYZE fortfarande under 9.1?

Om ditt bord är stort och datadistributionen är oregelbunden , vilket höjer default_statistics_target kan hjälpa. Eller snarare, ställ bara in statistikmålet för relevanta kolumner (de i WHERE eller JOIN klausuler i dina frågor, i princip):

ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number

Målet kan ställas in i intervallet 0 till 10000;

Kör ANALYZE igen efter det (på relevanta tabeller).

2. kostnadsinställningarna för planerare är uppskattningar avstängda.

Läs kapitlet Planer Kostnadskonstanter i manualen.

Titta på kapitlen default_statistics_target och random_page_cost på denna allmänt användbara PostgreSQL Wiki-sida.

Det finns många andra möjliga orsaker, men dessa är de absolut vanligaste.



  1. Oracle Date - Hur man lägger till år till datum

  2. Fördunkla känsliga uppgifter i dina genomförandeplaner

  3. SQLite-data till en RecyclerView

  4. Så här visar du frågeexekveringsplanen i Azure Data Studio (SQL-server)