Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: postgres, pagination, keyset, offset

Как правильно делать пагинацию в Postgres, чтобы избежать проблемы с OFFSET при больших данных?

Проверяет знание оптимизаций SQL-запросов.

Короткий ответ

OFFSET медленный, потому что Postgres всё равно сканирует строки до смещения. Решение — keyset pagination (по ключу): использовать WHERE id > last_id ORDER BY id LIMIT N.

Длинный ответ

OFFSET пагинация:

```
SELECT * FROM orders ORDER BY id LIMIT 50 OFFSET 50000;
```
Проблемы:

  1. Postgres пропускает все строки до offset, т.е. считывает десятки тысяч строк впустую.

  2. При больших данных запрос становится O(N).

  3. Скроллинг назад и вперёд нестабилен.

Решение — keyset pagination:

SELECT * FROM orders
WHERE id > $last_id
ORDER BY id
LIMIT 50;

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

  • сложность O(1)

  • использует индекс

  • стабильно при больших таблицах

Используется почти во всех high-load компаний.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

Ключевые слова

#postgres

#pagination

#keyset

#offset

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.