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