Sobes.tech
Назад к вопросам
Senior
3

Проблема OFFSET пагинации на больших таблицах и как её решить (cursor-based pagination)

Компании, где спрашивали
Salmon

Ответ от нейросети

sobes.tech AI

Проблема OFFSET пагинации на больших таблицах связана с тем, что при больших значениях OFFSET база данных вынуждена просматривать и пропускать большое количество строк, что приводит к значительному снижению производительности.

Например, запрос:

SELECT * FROM table ORDER BY id LIMIT 10 OFFSET 1000000;

будет медленным, так как СУБД должна перебрать миллион строк, чтобы вернуть нужные 10.

Решение — cursor-based pagination (пагинация на основе курсора):

Вместо смещения по количеству строк используется значение последнего полученного элемента (например, id), и выборка идёт с этого места.

Пример:

SELECT * FROM table WHERE id > last_seen_id ORDER BY id LIMIT 10;

Преимущества:

  • Быстрая выборка, так как используется индекс по id.
  • Нет необходимости пропускать большое количество строк.
  • Более стабильная пагинация при изменении данных (например, при добавлении или удалении записей).

Таким образом, cursor-based pagination значительно улучшает производительность и пользовательский опыт при работе с большими таблицами.