У меня есть таблица, в которой я делаю ORDER BY, перед LIMIT и OFFSET для разбивки на страницы.
Добавление индекса в столбец ORDER BY существенно влияет на производительность (при использовании в сочетании с небольшим LIMIT). На таблице 500 000 строк я увидел улучшение в 10 000 раз, добавив индекс, если бы был небольшой LIMIT.
Однако индекс не влияет на высокие СМЕЩЕНИЯ (т.е. более поздние страницы в моей разбивке на страницы). Это понятно: индекс b-дерева упрощает итерацию с самого начала, но не для поиска n-го элемента.
Похоже, что это поможет подсчитанный индекс b-tree, но я не знаю поддержки для них в PostgreSQL. Есть ли другое решение? Кажется, что оптимизация для больших СМЕЩЕНИЙ (особенно в прецедентах с разбивкой на страницы) не так уж необычна.
К сожалению, в руководстве PostgreSQL просто сказано: "Строки, пропущенные предложением OFFSET, все еще должны быть вычислены внутри сервера, поэтому большой СМЕЩЕНИЕ может быть неэффективным".