24

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

MongoDB Explain 文档中,我可以阅读:

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

nscannedObjects扫描的文档数。

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

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

我知道什么是“覆盖索引”。我想确切地了解查询在上面的示例中做了什么。它是否通过 ("scanned") 9 个元素 (nscanned = 9),其中所有元素都是索引条目并读取 ("examined") 其中只有 5 个 (nscannedObjects = 5) 的值以生成结果集?

4

2 回答 2

26

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

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

于 2012-12-17T08:04:47.187 回答
1

如果“光标”是索引 ==> nscanned = 否。如果“光标”是 FullTableScan ==> nscanned = no,则扫描索引的数量。扫描的文件

nscannedObjects ==> 扫描文档的数量

查询时,尽量减少所有计数,即 nscanned 和 nscannedObjects 都是最小值,这意味着您的查询应该运行得更快!

于 2012-12-17T14:58:52.430 回答