分析查询性能

explain()游标方法允许你检查查询系统的操作。此方法用于分析查询的效率是有用的,以及用于确定查询如何使用索引。 explain() 方法测试查询操作,而不是对查询性能的计时。因为explain()尝试多个查询计划,它不反映查询性能的精确计时。

一、评估一个查询的性能

使用explain()方法,在find()方法返回一个游标时调用这个方法。
 
  例如:
  评估inventory集合type字段的一个查询,在type字段上有一个索引。

  db.inventory.find( { type: 'food' } ).explain()

考虑下面的结果:

{
  "cursor" : "BtreeCursor type_1",
  "isMultiKey" : false,
  "n" : 5,
  "nscannedObjects" : 5,
  "nscanned" : 5,
  "nscannedObjectsAllPlans" : 5,
  "nscannedAllPlans" : 5,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 0,
  "nChunkSkips" : 0,
  "millis" : 0,
  "indexBounds" : { "type" : [
                                [ "food",
                                  "food" ]
                             ] },
  "server" : "mongodbo0.example.net:27017" }

cursor字段的BtreeCursor值表明该查询使用一个索引。

n字段表示该查询返回5个文档。

到返回的5个文档,查询扫描5个文档上的索引,用nscanned字段表示。然后从集合的5个完整的文档读取。用nscannedObjects字段表示。

如果没有索引,查询会扫描整个集合返回5个文档。

查看Explain Results方法对输出的全部细节。

二、比较索引性能

手动比较使用多个索引的查询的性能,您可以结合使用 hint()和explain()方法。

  例如:
  使用不同的索引评估一个查询:

db.inventory.find( { type: 'food' } ).hint( { type: 1 } ).explain()
db.inventory.find( { type: 'food' } ).hint( { type: 1, name: 1 } ).explain()

这返回关于使用相应索引的查询的执行的统计信息。

 注:
 如果你运行说explain(),而不包括hint(),查询优化器重新评估查询,返回查询统计信息前运行相对的多条索引。

有关解释输出更多的细节,请参阅Explain Results。

京ICP备14008139号-1