Skip to content
12 / 15

Пагинация через OFFSET или через курсор: что выбрать и почему?

LIMIT/OFFSET прост и позволяет прыгнуть на произвольную страницу, но у него два врождённых дефекта. Первый — стоимость: чтобы отдать страницу с OFFSET 100000, база обязана прочитать и выбросить сто тысяч строк, поэтому дальние страницы дорожают линейно. Второй — нестабильность: если между запросами вставили строку выше по списку, элементы сдвигаются и пользователь видит дубли или пропуски. Keyset-пагинация вместо номера строки использует значение последнего элемента: «дай двадцать записей строго после этой». Запрос попадает точно в индекс, стоимость страницы не зависит от номера, вставки выше ничего не ломают. Платите тем, что нельзя прыгнуть на страницу №57 и показать общее число страниц. Правило: ленты, прокрутка и выгрузки — курсор; админка по небольшой таблице — OFFSET.

Пагинация через OFFSET или через курсор: что выбрать и почему? | JScriptiser