Přístup „přeskočit a omezit“ není příliš efektivní, když stránkujete daleko do datové sady. Ve skutečnosti je to algoritmus Shlemiela Malíře.
Rozsahové dotazy jsou mnohem efektivnější (pokud jsou podporovány indexy). Představme si například, že zobrazujete tweety. Velikost vaší stránky je 20 a jste na stránce 1000 a chcete načíst stránku 1001.
Tento dotaz
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
je hodně méně efektivní než
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(za předpokladu, že máte index na created_at
).
Dostanete nápad:když načtete stránku, poznamenejte si časové razítko posledního tweetu a použijte jej k dotazu na další stránku.