Основы LIMIT, OFFSET и разбиения на страницы
Разбивайте большие наборы результатов на страницы с помощью LIMIT и OFFSET, учитывайте компромиссы производительности и используйте разбиение по ключу для стабильной прокрутки
«Основы LIMIT, OFFSET и разбиения на страницы» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
LIMIT: ограничение результата
LIMIT n возвращает не более n строк:
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;OFFSET: пропуск первых N строк
OFFSET k пропускает первые k строк:
-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;Пагинация = LIMIT + OFFSET
Классический шаблон с номерами страниц:
-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;Почему OFFSET работает медленно
OFFSET всё равно внутренне читает каждую пропущенную строку:
- Страница 1 по 10 → читает 10 строк
- Страница 1000 по 10 → читает 10 000 строк
- Страница 1 000 000 → читает десять миллионов строк
OFFSET имеет сложность O(offset). Для глубоких страниц это непригодно.
Пагинация по ключу («метод поиска»)
Переходите к следующей странице, сохраняя последний просмотренный ключ сортировки:
-- First page:
SELECT * FROM articles
ORDER BY published_at DESC, id DESC
LIMIT 20;
-- Next page — pass the last seen (published_at, id):
SELECT * FROM articles
WHERE (published_at, id) < ($1, $2)
ORDER BY published_at DESC, id DESC
LIMIT 20;Почему пагинация по ключу быстрее
Пагинация по ключу использует диапазонное сканирование индекса: сразу переходит к строке после последней просмотренной, читает N строк — и готово. Стоимость составляет O(размера страницы) и не зависит от глубины страницы.
LIMIT без ORDER BY недетерминирован
Практическое правило: всегда сочетайте LIMIT с ORDER BY. В противном случае база данных может возвращать разные строки при каждом вызове.
-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;
-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;Общее количество строк и пагинация
Пользовательскому интерфейсу иногда нужно общее количество строк. Отдельный запрос COUNT(*) — самое простое решение, но для больших таблиц он может быть затратным:
SELECT COUNT(*) FROM articles WHERE author_id = $1;
-- Alternative for huge tables: estimate from pg_class.reltuples or use approximate counts.FETCH FIRST (стандарт SQL)
Стандартный синтаксис SQL вместо LIMIT:
SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;
-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLYКурсоры для огромных результатов
Для экспорта миллионов строк используйте курсор базы данных или драйвер с потоковой передачей вместо циклов LIMIT/OFFSET:
BEGIN;
DECLARE big_cursor CURSOR FOR
SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;Когда OFFSET подходит
OFFSET подходит для неглубоких страниц (страницы 1–10 в пользовательском интерфейсе) или небольших таблиц. Для глубокой пагинации, бесконечной прокрутки или API используйте пагинацию по ключу.
Итоги
LIMIT и OFFSET разбивают результаты на страницы.
- Всегда сочетайте их с ORDER BY
- OFFSET работает медленно на большой глубине — для больших страниц переходите на пагинацию по ключу
- FETCH FIRST — стандартный эквивалент
Быстрая проверка
Как эффективнее всего выполнять пагинацию при глубоком переходе в большую таблицу?
Часто задаваемые вопросы
Урок «Основы LIMIT, OFFSET и разбиения на страницы» бесплатный?
Да — полный текст урока «Основы LIMIT, OFFSET и разбиения на страницы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы LIMIT, OFFSET и разбиения на страницы»?
Разбивайте большие наборы результатов на страницы с помощью LIMIT и OFFSET, учитывайте компромиссы производительности и используйте разбиение по ключу для стабильной прокрутки Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Основы LIMIT, OFFSET и разбиения на страницы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выбор столбцов и выражений
- Фильтры WHERE: операторы сравнения и логики
- ORDER BY для одного и нескольких столбцов
- Основы LIMIT, OFFSET и разбиения на страницы