Cambiar la consulta a
WHERE NOT emails."$$meta.deleted" = FALSE
AND (emails."$$meta.created", emails.key) >
('2018-02-13T14:30:35.679075Z', '8c0a3151-bf17-490f-8124-d93f7482624f')
y usa este índice:
CREATE INDEX ON emails ("$$meta.created", key)
WHERE NOT emails."$$meta.deleted";
Explicación:OR
es un problema de rendimiento
. Al reescribirlo como una comparación lexicográfica de pares, se deshace del OR
, y un escaneo de índice simple encuentra las filas de manera eficiente. PostgreSQL ya no tiene la tentación de usar el índice que admite ORDER BY
.