PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgres utilisant uniquement l'index trié pour interroger la table d'enregistrements 5m

Remplacez la requête par

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

et utilisez cet index :

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

Explication :OR est un problème de performances . En le réécrivant comme une comparaison lexicographique de paires, vous vous débarrassez du OR , et un simple parcours d'index trouve les lignes efficacement. PostgreSQL n'est plus tenté d'utiliser l'index qui supporte le ORDER BY .