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

Postgres-Abfrageoptimierung (Erzwingen eines Index-Scans)

Zum Testen Zwecks können Sie die Verwendung des Index erzwingen, indem Sie sequentielle Scans "deaktivieren" - am besten nur in Ihrer aktuellen Sitzung:

SET enable_seqscan = OFF;

nicht Verwenden Sie dies auf einem Produktivserver. Details im Handbuch hier.

Ich habe "Deaktivieren" zitiert, weil Sie sequentielle Tabellenscans nicht wirklich deaktivieren können. Aber jede andere verfügbare Option ist jetzt für Postgres vorzuziehen. Dies beweist, dass der mehrspaltige Index auf (metric_id, t) kann verwendet werden - nur nicht so effektiv wie ein Index auf der führenden Spalte.

Wahrscheinlich erzielen Sie bessere Ergebnisse, wenn Sie die Reihenfolge der Spalten in Ihrem PRIMARY KEY ändern (und der Index, der verwendet wird, um es hinter den Kulissen damit zu implementieren) zu (t, metric_id) . Oder erstellen Sie eine zusätzliche Index mit so umgekehrten Spalten.

  • Ist ein zusammengesetzter Index auch gut für Abfragen im ersten Feld?

Bessere Abfragepläne müssen Sie normalerweise nicht manuell erzwingen. Bei Einstellung enable_seqscan = OFF führt zu viel Planen Sie besser, irgendetwas stimmt wahrscheinlich nicht in Ihrer Datenbank. Betrachten Sie diese verwandte Antwort:

  • Halten Sie PostgreSQL davon ab, manchmal einen schlechten Abfrageplan zu wählen