nscanned nscannedObjects和n属性值在mongos exploian命令中相等

时间:2013-09-13 14:22:49

标签: mongodb

我正在使用mongodb作为我们的应用程序。 我通过将system.profiling级别设置为2来使用mongodb profiler,完成所有应用程序操作,从system.profile导出所有记录,最后根据分析器结果设置集合上的索引。

现在我确实解释了这些问题

查询1。

db.stocks.find({ symbol: "GOOG", date: "2013-09-13",type: "O",Mini: false, rootsymbol: "GOOG" }).sort( { "price": 1,"call":1} ).explain();
{
        "cursor" : "BtreeCursor symbol_1_date_1_type_1_Mini_1_rootsymbol_1_price_1",
        "nscanned" : 80,
        "nscannedObjects" : 80,
        "n" : 80,
        "scanAndOrder" : true,
        "millis" : 2,

查询2.

 db.stocks.find({ symbol: "NVO" }).explain()
{
        "cursor" : "BtreeCursor symbol_1",
        "nscanned" : 1,
        "nscannedObjects" : 1,
        "n" : 1,
        "millis" : 0,
        "indexBounds" : {
                "symbol" : [
                        [
                                "NVO",
                                "NVO"
                        ]
                ]
        }
}

我对结果感到困惑,因为nscannednscannedObjectsn在我的所有查询中始终相等。

如果nscanned,nscannedObjects和n值具有相等的值,请告诉我是否存在问题?

如果我遗失了某些内容或是否有问题,请告诉我?

2 个答案:

答案 0 :(得分:1)

他们都是平等的这一事实意味着你有良好的,未被发现的索引用法。

我将分解结果:

"nscanned" : 80,

这是在索引中扫描的数字

"nscannedObjects" : 80,

这是扫描索引后加载的文档数,如果此数字高于扫描数,则可能导致索引使用不良(取决于方案)。

时间nscannedObjects可能低于nscanned覆盖索引或(http://docs.mongodb.org/manual/reference/method/cursor.explain/#explain.nscannedObjects):

  

对于具有重复文档的数组字段上的多键索引。

"n" : 80,

这是退回的金额。

但是,这并不意味着您的排序效果很好,如第一个解释所示:

"scanAndOrder" : true,

答案 1 :(得分:1)

您的第一个查询很好 - 它使用索引查找存在的80个匹配项。 “n”是返回的文件数量; “nscannedRecords”是在查询期间扫描所需的数字(如果您有覆盖的查询,它可能小于“扫描”)。 “nscanned”是扫描的索引条目数(如果可以使用索引)。排序80条记录应该相当快;您没有可以使用的索引(来自您向我们展示的内容)。

第二个查询也很棒 - 它使用索引,并找到匹配的一个文档。

有关explain()的更多详细信息,请参阅http://docs.mongodb.org/manual/reference/method/cursor.explain/#explain-output-fields-core