【MongoDB学习笔记24】MongoDB的解释和提示函数

  

<强>一、解释函数

解释函数可以提供大量查询相关的信息,如果是慢查询,它最重要的诊断工具,例如:

在有索引的字段上查询:

祝辞,db.post.find ({“loc.city”:“纽约”}).explain (),,,   {,,,   ,,,“光标”,:,“BtreeCursor  loc.city_1”,,,,,   ,,,,“isMultiKey”:,假的,,,,,   ,,,“n”,:, 0,,,,,   ,,,,“nscannedObjects”:, 0,,,,,   ,,,,“nscanned”:, 0,,,,,   ,,,,“nscannedObjectsAllPlans”:, 0,,,,,   ,,,,“nscannedAllPlans”:, 0,,,,,   ,,,,“scanAndOrder”:,假的,,,,,   ,,,,“indexOnly”:,假的,,,,,   ,,,,“nYields”:, 0,,,,,   ,,,,“nChunkSkips”:, 0,,,,,   ,,,“飞船”,:,,,,,,   ,,,,“indexBounds”:, {,,,   ,,,,,,,“loc.city”,:,,,,   ,,,,,,,,,,,,,,,   ,,,,,,,,,,,,,,,“纽约”,,,,,   ,,,,,,,,,,,,,,,“纽约”,,,,   ,,,,,,,,,,,),,,,   ,,,,,,,),,,,   ,,,},,,,,   ,,,“服务器”,:,“localhost.localdomain: 27017”,,,,,   ,,,,“filterSet”:, false ,,,   },,,,   在

在没有索引的的字段上查询:

祝辞,db.post.find({“名称”:“乔”}).explain (),,,   {,,,   ,,,“光标”,:,“BasicCursor”,,,,,   ,,,,“isMultiKey”:,假的,,,,,   ,,,“n”,,, 2,,,,,   ,,,,“nscannedObjects”:, 15日,,,,,   ,,,,“nscanned”:, 15日,,,,,   ,,,,“nscannedObjectsAllPlans”:, 15日,,,,,   ,,,,“nscannedAllPlans”:, 15日,,,,,   ,,,,“scanAndOrder”:,假的,,,,,   ,,,,“indexOnly”:,假的,,,,,   ,,,,“nYields”:, 0,,,,,   ,,,,“nChunkSkips”:, 0,,,,,   ,,,“飞船”,:,0,,,,,   ,,,“服务器”,:,“localhost.localdomain: 27017”,,,,,   ,,,,“filterSet”:, false ,,,   },,,,   在

对比上面两个查询,对解释结果中的字段的解释:

“光标”:“BasicCursor”表示本次查询没有使用索引;“BtreeCursor 疯狂的。city_1”表示使用了地方。城上的索引;

“isMultikey”表示是否使用了多键索引;

“n”:本次查询返回的文档数量;

“nscannedObjects”:表示按照索引指针去磁盘上实际查找实际文档的次数;

“nscanned”:如果没有索引,这个数字就是查找过的索引条目数量;

“scanAndOrder”:是否对结果集进行了排序;

“indexOnly”:是否利用索引就能完成索引;

“nYields”:如果在查询的过程中有写操作,查询就会暂停;这个字段代表在查询中因写操作而暂停的次数;

“飞船”:本次查询花费的次数,数字越小说明查询的效率越高;

“indexBounds”:这个字段描述索引的使用情况,给出索引遍历的范围。

“filterSet”:是否使用和索引过滤;

,

<强>二,提示函数

如果发现MongoDB使用的索引和自己企望的索引不一致,可以使用了函数强制MongoDB使用特定的索引,例如

祝辞db.users.find({“年龄”:1、“用户名”:/?/}).hint({“用户名”:1、“年龄”:1})


【MongoDB学习笔记24】MongoDB的解释和提示函数