ttlsa教程系列之mongodb——(四)mongodb索引&explain&profile

  • A+
所属分类:mongodb

索引是用来加快查询速度的,事物都有双面性的,同时在每次插入、更新和删除操作时都会产生额外的开销。索引有时并不能解决查询慢的问题,一般来说,返回集合中一半以上的结果,全表扫描要比查询索引更高效些。
创建太多索引,会导致插入非常慢,同时还会占用很大空间。可以通过explain和hint工具来分析。
索引有方向的,倒序还是升序。
每个集合默认的最大索引个数为64个。

1. 查看索引

此实例中有三个索引,其中_id是创建表的时候自动创建的索引,不能删除。uid_1_stmp_-1是组合索引。1表示升序,-1表示降序。

2. 创建索引
索引参数有:

 

当有大量数据时,创建索引会非常耗时,可以指定到后台执行,只需指定“backgroud:true”即可。如

3. 嵌入式索引
为内嵌文档的键创建索引与普通的键创建索引并无差异。

4. 文档式索引

5. 组合索引

以下的查询将使用到此索引

对多个值进行组合索引,查询时,子查询与索引前缀匹配时,才可以使用该组合索引。

6. 唯一索引
只需要在ensureIndex命名中指定"unique:true"即可。

当为已有的集合创建索引,可能有些数据已经有重复了的,那么创建唯一索引将失败。可以使用dropDups来保留第一个文档,而后的重复文档将删除,这种方法慎重操作。

7. 强制索引
hint命令可以强制使用某个索引

8. 删除索引
删除集合所有索引:

删除集合某个索引:

9. 重建索引

重建索引会锁住集合的。用repair命令修复数据库时,会重建索引的。

10. 全文索引
mongodb全文索引是在2.4版本引入的,后面再说这个。

11. explain执行计划
使用explain命令返回查询使用的索引情况,耗时,扫描文档数等等统计信息。

字段说明:
cursor:返回游标类型
isMultiKey:是否使用组合索引
n:返回文档数量
nscannedObjects:被扫描的文档数量
nscanned:被检查的文档或索引条目数量
scanAndOrder:是否在内存中排序
indexOnly:
nYields:该查询为了等待写操作执行等待的读锁的次数
nChunkSkips:
millis:耗时(毫秒)
indexBounds:所使用的索引
server: 服务器主机名

12. 开启profiling功能
查看profiling级别:

设置profiling级别:

profile的级别可以取0,1,2 表示的意义如下:
0 – 不开启 默认级别
1 – 记录慢命令 (默认为>100ms)
2 – 记录所有命令

13. 查询profiling记录
MongoDB Profile 记录是直接存在系统 db 里的,记录位置system.profile 。

字段说明:
ts: 该命令在何时执行
op: 操作类型
query: 本命令的详细信息
responseLength: 返回结果集的大小
ntoreturn: 本次查询实际返回的结果集
millis: 该命令执行耗时,以毫秒记

14. 修改profiling大小
capped Collections 比普通Collections 的读写效率高。Capped Collections 是高效率的Collection类型,它有如下特点:
a. 固定大小;Capped Collections 必须事先创建,并设置大小:
> db.createCollection("collection", {capped:true, size:100000})
b. Capped Collections 可以insert 和update 操作,不能delete 操作。只能用drop()方法删除整个Collection。
c. 默认基于Insert 的次序排序的。如果查询时没有排序,则总是按照insert 的顺序返回。
d. FIFO。如果超过了Collection 的限定大小,则用FIFO 算法,新记录将替代最先insert的记录

转载请注明出处:http://www.ttlsa.com/html/1661.html

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  2   博主  0   引用   2

    • Joe 9

      为什么你的代码着色这么炫?是网页代码着色,还是你用用写mongo shell的Editor本身就这个颜色?

    • 来自外部的引用: 2

      • mongodb 索引
      • mongodb 索引 – 马开东博客