Назад к вопросам
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 значительно улучшает производительность и пользовательский опыт при работе с большими таблицами.