Dla 500 rekordów wydajność prawdopodobnie nie jest problemem, ale jeśli masz miliony rekordów, może być korzystne użycie klauzuli WHERE, aby wybrać następną stronę:
SELECT *
FROM yourtable
WHERE id > 234374
ORDER BY id
LIMIT 20
„234374” tutaj jest identyfikatorem ostatniego rekordu z poprzedniej strony, którą przeglądałeś.
Umożliwi to użycie indeksu na id do znalezienia pierwszego rekordu. Jeśli go użyjesz, LIMIT offset, 20możesz zauważyć, że staje się on coraz wolniejszy, gdy przewijasz stronę do końca. Jak powiedziałem, prawdopodobnie nie będzie to miało znaczenia, jeśli masz tylko 200 rekordów, ale może to zmienić przy większych zestawach wyników.
Kolejną zaletą tego podejścia jest to, że jeśli dane zmienią się między połączeniami, nie przegapisz ani nie uzyskasz powtarzającego się rekordu. Jest tak, ponieważ dodanie lub usunięcie wiersza oznacza przesunięcie wszystkich wierszy po jego zmianie. W twoim przypadku prawdopodobnie nie jest to ważne - myślę, że twoja pula reklam nie zmienia się zbyt często, a zresztą nikt nie zauważy, że otrzymają tę samą reklamę dwa razy z rzędu - ale jeśli szukasz „najlepszego sposobu” to kolejna rzecz, o której należy pamiętać przy wyborze podejścia.
Jeśli chcesz używać LIMIT z przesunięciem (i jest to konieczne, jeśli użytkownik przechodzi bezpośrednio do strony 10000 zamiast stronicowania stron jeden po drugim), możesz przeczytać ten artykuł na temat wyszukiwania w późnych wierszach, aby poprawić wydajność LIMIT z dużym offsetowy.