mongodb提供了类似传统关系型数据库的查询分析方法。
它使用** db.collection.find().explain()**分析查询计划
这个方法可以帮助我们优化代码。
例如如下的代码:
for (val=0; val < 1000000; val++) {
db.person.save({person : val});
}
加索引之前的查询计划:
db.person.find({person:555500}).explain();
{
“cursor” : “BasicCursor”,
“isMultiKey” : false,
“n” : 99899,
“nscannedObjects” : 1000000,
“nscanned” : 1000000,
“nscannedObjectsAllPlans” : 1000000,
“nscannedAllPlans” : 1000000,
“scanAndOrder” : false,
“indexOnly” : false,
“nYields” : 781,
“nChunkSkips” : 0,
“millis” : 40,
“server” : “gaurav-Aspire-E1-572:27017”,
“filterSet” : false
}
加索引之后的查询计划:
db.person.find({person:555500}).explain();
{
“cursor” : “BtreeCursor person_1”,
“isMultiKey” : false,
“n” : 1,
“nscannedObjects” : 1,
“nscanned” : 1,
“nscannedObjectsAllPlans” : 1,
“nscannedAllPlans” : 1,
“scanAndOrder” : false,
“indexOnly” : false,
“nYields” : 0,
“nChunkSkips” : 0,
“millis” : 0,
“indexBounds” : {
“person” : [
[
555500,
555500
]
]
},
“server” : “gaurav-Aspire-E1-572:27017”,
“filterSet” : false
}
返回字段说明:
_cursor:返回游标类型,有BasicCursor和BtreeCursor,BtreeCursor说明使用了索引。
nscanned:扫描document的行数。
n:返回的文档行数。
millis:耗时(毫秒)。
indexBounds:所用的索引。
** 添加索引的方式: **
db.person.ensureIndex({person:1});
1:表示升序索引 -1:表示降序索引
这个根据实际的字段排序方式建立
查询索引的方式:
db.person.getIndexes();
更多详情请参考官方文档:
http://docs.mongodb.org/manual/reference/method/cursor.explain/