Прежде всего, если вы хотите разбить на страницы, у вас обязательно должно быть предложение ORDER BY. Тогда вам просто нужно использовать это предложение, чтобы глубже копаться в вашем наборе данных. Например, рассмотрим это:
SELECT * FROM my_table ORDER BY id LIMIT 20
У вас будут первые 20 записей, скажем, их идентификаторы: 5,8,9, ..., 55,64. Ваша пагинационная ссылка на страницу 2 будет выглядеть как "list.php? Page = 2 & id = 64", а ваш запрос будет
SELECT * FROM my_table WHERE id > 64 ORDER BY id LIMIT 20
Нет смещения, прочитано только 20 записей. Это не позволяет вам произвольно переходить на любую страницу, но в большинстве случаев люди просто просматривают следующую / предыдущую страницу. Индекс «id» улучшит производительность даже при больших значениях OFFSET.