博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MongoDB学习笔记24】MongoDB的explain和hint函数
阅读量:5941 次
发布时间:2019-06-19

本文共 1654 字,大约阅读时间需要 5 分钟。

一、explain函数

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

在有索引的字段上查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
> db.post.
find
({
"loc.city"
:
"ny"
}).explain()   
{    
    
"cursor" 
"BtreeCursor loc.city_1"
,    
    
"isMultiKey" 
false
,    
    
"n" 
: 0,    
    
"nscannedObjects" 
: 0,    
    
"nscanned" 
: 0,    
    
"nscannedObjectsAllPlans" 
: 0,    
    
"nscannedAllPlans" 
: 0,    
    
"scanAndOrder" 
false
,    
    
"indexOnly" 
false
,    
    
"nYields" 
: 0,    
    
"nChunkSkips" 
: 0,    
    
"millis" 
: 1,    
    
"indexBounds" 
: {    
        
"loc.city" 
: [    
            
[    
                
"ny"
,    
                
"ny"    
            
]    
        
]    
    
},    
    
"server" 
"localhost.localdomain:27017"
,    
    
"filterSet" 
false    
}    
>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> db.post.
find
({
"name"
:
"joe"
}).explain()   
{    
    
"cursor" 
"BasicCursor"
,    
    
"isMultiKey" 
false
,    
    
"n" 
: 2,    
    
"nscannedObjects" 
: 15,    
    
"nscanned" 
: 15,    
    
"nscannedObjectsAllPlans" 
: 15,    
    
"nscannedAllPlans" 
: 15,    
    
"scanAndOrder" 
false
,    
    
"indexOnly" 
false
,    
    
"nYields" 
: 0,    
    
"nChunkSkips" 
: 0,    
    
"millis" 
: 0,    
    
"server" 
"localhost.localdomain:27017"
,    
    
"filterSet" 
false    
}    
>

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

“cursor”:“BasicCursor”表示本次查询没有使用索引;“BtreeCursor  loc.city_1 ”表示使用了loc.city上的索引;

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

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

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

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

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

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

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

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

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

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

 

二、hint函数

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

1
>db.
users
.
find
({“age”:1,”username”:/.*/}).hint({“username”:1,”age”:1})
本文转自 bannerpei 51CTO博客,原文链接:http://blog.51cto.com/281816327/1601477,如需转载请自行联系原作者
你可能感兴趣的文章
openstack学习笔记三 创建第一个实例
查看>>
day21 登录cookie
查看>>
1---基础(1)
查看>>
ORA-01102: cannot mount database in EXCLUSIVE mode
查看>>
Nginx+Tomcat简单集群配置
查看>>
Linux下Tomcat启动正常,但浏览器无法访问
查看>>
烂泥:mysql修改本地主机连接
查看>>
ubuntu 12.04.1升级至ubuntu 12.10出现gcc-4.7依赖库错误的解决办法
查看>>
烂泥:学习Nagios(三): NRPE安装及配置
查看>>
【新手教程】如何向App Store提交应用
查看>>
shell 实现memcache缓存命中率监控脚本
查看>>
使用ip6tables禁用ipv6
查看>>
lamp介绍,wordpress,phpmyadmin,discuzz安装
查看>>
ceph rbdmap遇到的一个问题
查看>>
ContactG,基于Spark IM组织联络人插件
查看>>
Java 内存模型 与 高效并发
查看>>
我的友情链接
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>