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

postgres utilizza solo l'indice ordinato per interrogare una tabella di 5 milioni di record

Modifica la query in

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

e usa questo indice:

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

Spiegazione:OR è un problema di prestazioni . Riscrivendolo come confronto lessicografico di coppie, elimini il OR e una semplice scansione dell'indice trova le righe in modo efficiente. PostgreSQL non è più tentato di utilizzare l'indice che supporta ORDER BY .