Mongodb中的explain():“nscanned”和“nscannedObjects”之间的区别

时间:2012-12-17 07:40:50

标签: mongodb

我无法在Mongodb的explain查询输出中得到“nscanned”和“nscannedObjects”之间的确切区别。

MongoDB Explain documentation上,我可以阅读:

  

nscanned 检查的项目数(文档或索引条目)。项目   可能是对象或索引键。如果涉及“覆盖指数”,   nscanned可能高于nscannedObjects。

     

nscannedObjects 扫描的文档数量。

这两个领域有什么不同? 更具体的是,当我有一个使用BtreeCursor(索引)的查询时,究竟意味着什么,这两个字段有两个不同的值,例如:

{
    "cursor" : "BtreeCursor a_1_b_1",
    "isMultiKey" : false,
    "n" : 5,
    "nscannedObjects" : 5,
    "nscanned" : 9, 
    (...)
}

我知道“covered index"是什么。 我想准确理解查询在上面的例子中做了什么。 它是否通过(“扫描”)9个元素(nscanned = 9),其中所有元素都是索引条目并且只读取(“检查”)其中5个(nscannedObjects = 5)的值以生成结果集? / p>

2 个答案:

答案 0 :(得分:25)

这意味着:
该查询返回了5个文档 - n
扫描了索引中的9个文档 - nscanned
然后阅读集合中的5个完整文档 - nscannedObjects

类似的例子给出:
http://docs.mongodb.org/manual/reference/method/cursor.explain/#cursor.explain

答案 1 :(得分:0)

如果“光标”是索引==> nscanned =没有。索引扫描 否则,如果“光标”是FullTableScan ==> nscanned =没有。扫描文件

nscannedObjects ==>扫描的文件数量

查询时,尝试最小化所有计数,即nscanned和nscannedObjects都是最小值意味着您的查询 运行得更快!