Короткий ответ Offset-пагинация (LIMIT/OFFSET) проста, но даёт сдвиги и дубликаты/пропуски при параллельных вставках/удалениях и деградирует по производительности на больших смещениях; cursor-based пагинация (по последнему увиденному значению ключа) устойчива к изменениям данных между запросами страниц и быстрее на больших датасетах, но не позволяет прыгать на произвольную страницу по номеру. Как это работает подробнее offset-пагинация просит БД пропустить N строк и вернуть следующие M — при больших N база всё равно сканирует/сортирует пропущенные строки, что линейно растёт по стоимости. Cursor-пагинация использует значение (обычно ID или комбинацию полей сортировки) последней полученной записи как отправную точку для следующего запроса (WHERE id > :last_id ORDER BY id LIMIT :limit), что позволяет БД использовать индекс для быстрого поиска стартовой точки без сканирования пропущенных строк. Пример кода Что использовать на практике Рекомендация. если пользователю нужно показать номера страниц и дать переход "н