> Какие стратегии пагинации можно использовать вместо LIMIT OFFSET? (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Reksoft
Стек: Go
> Пример ответа
Вместо LIMIT OFFSET в Go (и в целом в SQL) можно применять несколько стратегий, каждая из которых решает проблему падения производительности на больших смещениях и нестабильности при частых вставках.
-
Cursor-based пагинация (keyset pagination) - наиболее эффективная альтернатива. Вместо номера страницы передаём значение последнего элемента предыдущей страницы (например,
idилиcreated_at). Запрос выглядит так:SQLSELECT * FROM users WHERE id > $1 ORDER BY id LIMIT $2В Go это реализуется через параметры запроса:
db.QueryContext(ctx, query, lastID, limit). Преимущество: стабильная производительность на любом объёме данных, так как используется индекс. -
Seek method - вариация cursor-based, где вместо
>используется комбинация полей для точного позиционирования. Например, для сортировки по(score, id):SQLSELECT * FROM users WHERE (score, id) > ($1, $2) ORDER BY score, id LIMIT $3В Go можно передавать кортеж как два отдельных параметра.
-
Page-based с фиксированным ключом - если данные редко меняются, можно использовать
WHERE id BETWEEN $1 AND $2с предварительно вычисленными диапазонами. Требует знания минимального и максимальногоidна странице. -
Использование индексов с покрытием - даже при
LIMIT OFFSETможно ускорить запрос, если сначала выбрать только ключи, а потом присоединить остальные данные:GOrows, _ := db.QueryContext(ctx, "SELECT id FROM users ORDER BY id LIMIT $1 OFFSET $2", limit, offset)// затем SELECT * WHERE id IN (...)
На практике в Go чаще всего выбирают cursor-based пагинацию из-за её предсказуемости и простоты реализации с параметризованными запросами.
> Похожие задачи по backend
Как сохранить большой объем данных клиентов с множеством счетов в оперативной памяти без базы данных?
Был ли опыт работы с MongoDB или аналогичными документно-ориентированными базами данных
Что такое функция
Как реализовать миграции базы данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью