Phương pháp tiếp cận "bỏ qua và giới hạn" không hiệu quả lắm khi bạn phân trang xa vào tập dữ liệu. Nó thực sự là một thuật toán của Shlemiel the Painter.
Các truy vấn phạm vi hiệu quả hơn nhiều (khi được hỗ trợ bởi các chỉ mục). Ví dụ:hãy tưởng tượng rằng bạn đang hiển thị các tweet. Kích thước trang của bạn là 20 và bạn đang ở trang 1000 và muốn tải trang 1001.
Truy vấn này
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
là nhiều kém hiệu quả hơn
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(miễn là bạn có chỉ mục trên created_at
).
Bạn có ý tưởng:khi bạn tải một trang, hãy ghi lại dấu thời gian của tweet cuối cùng và sử dụng nó để truy vấn trang tiếp theo.