sql >> Database >  >> RDS >> PostgreSQL

Zorg ervoor dat PostgreSQL soms een slecht queryplan kiest

Als de queryplanner slechte beslissingen neemt, is dat meestal een van de volgende twee dingen:

1. De statistieken zijn onjuist.

Voer je ANALYZE . uit? genoeg? Ook populair in zijn gecombineerde vorm VACUUM ANALYZE . Als autovacuüm is ingeschakeld (wat de standaard is in het moderne Postgres), ANALYZE wordt automatisch uitgevoerd. Maar denk aan:

  • Wordt regelmatige VACUMANALYSE nog steeds aanbevolen onder 9.1?

Als uw tafel groot is en de gegevensdistributie is onregelmatig , het verhogen van de default_statistics_target kan helpen. Of liever, stel gewoon het statistische doel in voor relevante kolommen (die in WHERE of JOIN clausules van uw zoekopdrachten, in principe):

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

Het doel kan worden ingesteld in het bereik van 0 tot 10000;

Voer ANALYZE uit daarna opnieuw (op relevante tabellen).

2. De kosteninstellingen voor planner schattingen zijn uitgeschakeld.

Lees het hoofdstuk Planner Kostenconstanten in de handleiding.

Bekijk de hoofdstukken default_statistics_target en willekeurige_paginakosten op deze over het algemeen nuttige PostgreSQL Wiki-pagina.

Er zijn veel andere mogelijke redenen, maar dit zijn verreweg de meest voorkomende.



  1. Microsoft SQL Server 2005/2008:gegevenstype XML versus tekst/varchar

  2. MariaDB JSON_COMPACT() uitgelegd

  3. Hoe voer ik elke dag een opgeslagen procedure uit in SQL Server Express Edition?

  4. Postgres - Functie om het snijpunt van 2 ARRAY's te retourneren?