0Pricing
SQL Academy · Урок

Основы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Выбор столбцов и выражений
  2. Фильтры WHERE: операторы сравнения и логики
  3. ORDER BY для одного и нескольких столбцов
  4. Основы LIMIT, OFFSET и разбиения на страницы
← Назад к SQL Academy