Для 500 записей эффективность, вероятно, не проблема, но если у вас есть миллионы записей, то может быть полезно использовать предложение WHERE для выбора следующей страницы:
SELECT *
FROM yourtable
WHERE id > 234374
ORDER BY id
LIMIT 20
Здесь "234374" - это идентификатор последней записи с предыдущей просмотренной вами страницы.
Это позволит использовать индекс по идентификатору для поиска первой записи. Если вы используете LIMIT offset, 20
, вы можете обнаружить, что он становится все медленнее и медленнее по мере продвижения к концу. Как я уже сказал, это, вероятно, не имеет значения, если у вас есть только 200 записей, но это может иметь значение для больших наборов результатов.
Еще одним преимуществом этого подхода является то, что если данные меняются между вызовами, вы не пропустите записи или получите повторную запись. Это связано с тем, что добавление или удаление строки означает, что смещение всех строк после нее изменяется. В вашем случае это, вероятно, не важно - я думаю, что ваш пул рекламы не меняется слишком часто, и в любом случае никто не заметит, получат ли они одно и то же объявление дважды подряд - но если вы ищете «лучший способ» тогда это еще одна вещь, которую нужно иметь в виду при выборе того, какой подход использовать.
Если вы хотите использовать LIMIT со смещением (и это необходимо, если пользователь переходит непосредственно к странице 10000 вместо того, чтобы перелистывать страницы по одной), тогда вы можете прочитать эту статью о поздних поисках строк для улучшения производительности LIMIT с большим смещением.