Для 500 записів ефективність, мабуть, не є проблемою, але якщо у вас є мільйони записів, тоді вигідно використовувати пункт WHERE для вибору наступної сторінки:
SELECT *
FROM yourtable
WHERE id > 234374
ORDER BY id
LIMIT 20
"234374" - це ідентифікатор останнього запису зі сторінки, яку ви переглядали.
Це дозволить використовувати індекс на id, щоб знайти перший запис. Якщо ви використовуєте, LIMIT offset, 20ви можете виявити, що він стає повільніше і повільніше, коли ви переходите на сторінку в кінці. Як я вже сказав, це, мабуть, не має значення, якщо у вас всього 200 записів, але це може змінити великі набори результатів.
Ще одна перевага цього підходу полягає в тому, що якщо дані змінюються між дзвінками, ви не пропустите записи або отримаєте повторний запис. Це тому, що додавання або видалення рядка означає, що зміщення всіх рядків після його зміни. У вашому випадку це, мабуть, не важливо - я думаю, ваш рекламний пакет не змінюється занадто часто, і все одно ніхто не помітить, якщо вони отримують одне і те ж оголошення двічі поспіль - але якщо ви шукаєте "найкращий спосіб" то це ще одна річ, яку слід пам’ятати, вибираючи, який підхід використовувати.
Якщо ви бажаєте використовувати LIMIT із зміщенням (а це необхідно, якщо користувач переходить безпосередньо на сторінку 10000 замість того, щоб переглядати сторінки по черзі), ви можете прочитати цю статтю про пошук пізніх рядків, щоб покращити продуктивність LIMIT з великим компенсувати.