MongoDB 查询剖析常用函数有:explain() 和 hint()。
利用 explain()
explain 操作供应了查询信息,利用索引及查询统计等。有利于我们对索引的优化。

接下来我们在 users 凑集中创建 gender 和 user_name 的索引:
>db.users.ensureIndex({gender:1,user_name:1})</p><p>现在在查询语句中利用 explain :</p><pre>>db.users.find({gender:\"大众M\"大众},{user_name:1,_id:0}).explain()
以上的 explain() 查询返回如下结果:
{
\"大众cursor\"大众 : \"大众BtreeCursor gender_1_user_name_1\"大众,
\"大众isMultiKey\公众 : false,
\"大众n\公众 : 1,
\"大众nscannedObjects\公众 : 0,
\公众nscanned\"大众 : 1,
\公众nscannedObjectsAllPlans\公众 : 0,
\公众nscannedAllPlans\"大众 : 1,
\公众scanAndOrder\"大众 : false,
\"大众indexOnly\"大众 : true,
\"大众nYields\公众 : 0,
\公众nChunkSkips\公众 : 0,
\"大众millis\公众 : 0,
\公众indexBounds\"大众 : {
\公众gender\"大众 : [
[
\"大众M\"大众,
\公众M\"大众
]
],
\公众user_name\"大众 : [
[
{
\"大众$minElement\公众 : 1
},
{
\"大众$maxElement\"大众 : 1
}
]
]
}}
现在,我们看看这个结果集的字段:
indexOnly: 字段为 true ,表示我们利用了索引。
cursor:由于这个查询利用了索引,MongoDB中索引存储在B树构造中,以是这是也利用了BtreeCursor类型的游标。如果没有利用索引,游标的类型是BasicCursor。这个键还会给出你所利用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes凑集(系统自动创建,由于存储索引信息,这个轻微会提到)来得到索引的详细信息。
n:当前查询返回的文档数量。
nscanned/nscannedObjects:表明当前这次查询一共扫描了凑集中多少个文档,我们的目的是,让这个数值和返回文档的数量越靠近越好。
millis:当前查询所需韶光,毫秒数。
indexBounds:当前查询详细利用的索引。
利用 hint()
虽然MongoDB查询优化器一样平常事情的很不错,但是也可以利用hints来强制MongoDB利用一个指定的索引。
这种方法某些环境下会提升性能。 一个有索引的collection并且实行一个多字段的查询(一些字段已经索引了)。
如下查询实例指定了利用 gender 和 user_name 索引字段来查询:
>db.users.find({gender:\"大众M\"大众},{user_name:1,_id:0}).hint({gender:1,user_name:1})
可以利用 explain() 函数来剖析以上查询:
>db.users.find({gender:\公众M\"大众},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()
如您还有不明白的可以不才面与我留言或是与我磋商QQ群308855039,我们一起飞!