sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres-forespørgselsoptimering (tvinger en indeksscanning)

Til test formål, du kan tvinge brugen af ​​indekset ved at "deaktivere" sekventielle scanninger - bedst kun i din nuværende session:

SET enable_seqscan = OFF;

Gør ikke bruge dette på en produktiv server. Detaljer i manualen her.

Jeg citerede "deaktivering", fordi du faktisk ikke kan deaktivere sekventielle tabelscanninger. Men enhver anden tilgængelig mulighed er nu at foretrække for Postgres. Dette vil bevise, at multikolonneindekset på (metric_id, t) kan bruges - bare ikke så effektivt som et indeks på den forreste kolonne.

Du får sandsynligvis bedre resultater ved at ændre rækkefølgen af ​​kolonner i din PRIMARY KEY (og indekset brugt til at implementere det bag gardinerne med det) til (t, metric_id) . Eller opret en ekstra indeks med omvendte kolonner som den.

  • Er et sammensat indeks også godt til forespørgsler i det første felt?

Du behøver normalt ikke gennemtvinge bedre forespørgselsplaner ved manuel indgriben. Hvis du indstiller enable_seqscan = OFF fører til meget bedre plan, noget er sandsynligvis ikke rigtigt i din database. Overvej dette relaterede svar:

  • Hold PostgreSQL fra nogle gange at vælge en dårlig forespørgselsplan


  1. Mysql::Fejl:Den angivne nøgle var for lang; max nøglelængde er 1000 bytes

  2. MariaDB JSON_ARRAYAGG() Forklaret

  3. Sådan formateres tal som valuta i MySQL

  4. 2 måder at få partitionsoplysninger til en tabel i SQL Server (T-SQL)