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
.