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

Postgres verwendet nur den sortierten Index zum Abfragen der 5-Millionen-Datensatztabelle

Ändern Sie die Abfrage in

WHERE NOT emails."$$meta.deleted" = FALSE
  AND (emails."$$meta.created", emails.key) >
      ('2018-02-13T14:30:35.679075Z', '8c0a3151-bf17-490f-8124-d93f7482624f')

und verwenden Sie diesen Index:

CREATE INDEX ON emails ("$$meta.created", key)
   WHERE NOT emails."$$meta.deleted";

Erklärung:OR ist ein Leistungsproblem . Indem Sie es in einen lexikografischen Vergleich von Paaren umschreiben, werden Sie das OR los , und ein einfacher Index-Scan findet die Zeilen effizient. PostgreSQL ist nicht mehr versucht, den Index zu verwenden, der ORDER BY unterstützt .