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