2012-04-09 62 views

回答

33

当您远离数据集进行分页时,“跳过并限制”方法效率不高。它实际上是一个Shlemiel the Painter's algorithm

范围查询效率更高(如果受索引支持)。例如,让我们假设您正在显示推文。您的页面大小为20,你是1000页,并希望加载页面1001

这个查询

db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20) 

少效率比

db.tweets.find({created_at: {$lt: last_displayed_date}}). 
      sort({created_at: -1}).limit(20); 

(前提是你有索引created_at)。

您明白了:在加载页面时,请记下最后一条推文的时间戳,并用它来查询下一页。

+1

如果有不同用户同时创建了一些推文,但我需要显示他们呢? – 2012-04-09 11:55:08

+0

完全一样的毫秒?我不这么认为。 – 2012-04-09 11:55:50

+1

如果是这样的话,按'created_at:-1,user_id:1'排序# – 2012-04-09 11:56:31

相关问题