Променете заявката на
WHERE NOT emails."$$meta.deleted" = FALSE
AND (emails."$$meta.created", emails.key) >
('2018-02-13T14:30:35.679075Z', '8c0a3151-bf17-490f-8124-d93f7482624f')
и използвайте този индекс:
CREATE INDEX ON emails ("$$meta.created", key)
WHERE NOT emails."$$meta.deleted";
Обяснение:OR
е проблем с производителността
. Като го пренапишете като лексикографско сравнение на двойки, вие се отървавате от OR
, а просто сканиране на индекс намира редовете ефективно. PostgreSQL вече не се изкушава да използва индекса, който поддържа ORDER BY
.