【发布时间】:2012-06-19 08:00:43
【问题描述】:
这里是查询:
$collection->find(array("x"=>new MongoId("..."))->skip(5)->limit(10);
使用 explain 给出以下结果:
[n]=>10
[nscanned]=>15
[nscannedObjects]=>15
"x" 上有索引。那么,如果我跳过前 5 个文档,为什么扫描对象的数量是 15 而不是 10?
【问题讨论】:
-
@hakre 这就是为什么 nscanned 应该是 15。而不是 nscannedObjects。
-
@hakre:如果您不理解问题,请不要考虑发表评论。看看Asya的回答。这是我所期待的。这是一个错误问题。不要在这里教数学。我比你懂数学。
-
在服务器上,对象已经加载完毕。对象被扫描。跳过操作与返回给客户端的内容不同,但服务器正在报告要扫描的对象。我认为这没有任何问题,并认为错误报告是虚假的。我会说通常 mongodb 开发人员都懒得清理打开的票。
-
@hakre thnx。那么尽管使用索引,但将跳过的文档加载到内存中不是效率低下吗?有什么解决方案吗?
-
@Ashish:是否效率低下?你衡量过这个吗?解决什么问题?您期望错误的数字的问题?