Выбор ответа Middle Разборы систем обновлено
Пагинация ленты
Вопрос
Почему для бесконечной ленты используют пагинацию курсором, а не LIMIT 20 OFFSET 400?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Курсор не даёт дублей и не сканирует пропущенные строки. При OFFSET новые посты сверху сдвигают выдачу, и пользователь видит дубли или пропуски; к тому же БД всё равно читает и отбрасывает пропущенные строки, и чем глубже, тем дороже.
Варианты ответа
- Курсор не даёт дублей и не сканирует пропущенные строкиправильный ответ
- OFFSET не поддерживается в PostgreSQL 16 для больших таблиц
- Курсор позволяет перейти сразу на страницу 50 без запроса
- OFFSET возвращает строки в случайном порядке без индекса
Разбор
При OFFSET новые посты сверху сдвигают выдачу, и пользователь видит дубли или пропуски; к тому же БД всё равно читает и отбрасывает пропущенные строки, и чем глубже, тем дороже. Курсор «дай 20 постов старше X» стабилен и идёт по индексу. OFFSET в PostgreSQL есть, порядок задаётся ORDER BY, а прыжок на произвольную страницу как раз неудобен с курсором.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.