mongodb系列~ 索引详解

一 索引分类
   1 单列索引 2 联合索引 3 唯一索引 4 TTL索引(删除数据) 5  2dsphere 6 文本索引 7 hash索引
二 原则
   1 一个集合最多支持64个索引,单个索引最大内存占用500M 控制参数maxIndexBuildMemoryUsageMegabytes 索引键值不能超过1024个字节,否则会触发报错
   2  文本索引-1 只能最多有一个文本索引
                      2 db.collections.create!ndex( { comments :”text” })-针对comments字段添加文本索引
   3 最左联合索引
   4 支持覆盖索引
   5 支持同时创建升序+降序组合索引 1  db.collections.createindex({"column1":1,"column2":-1})
   6 TTL索引 -1  要注意列必须是日期或者包含日期的数组,否则不会删除,
                      2  本身是单列索引,不支持复合索引
                      3  列的本身不能是索引,否正需要删除后再进行添加
                      4  无法再capped集合上创建
                      5   db.collections.create Index ({”lastModifiedDate”: 1 } ,{ expireAfterSeconds: 3600 } )
   7 唯一性索引- 1 针对缺失列和重复列检测是否能添加,针对hash索引无法指定唯一性约束
                          2 db .members . createindex( { groupNumber : 1 ,astname :1 , firstname : 1 },{unique: true } )
三 索引执行计划树
   第一部分
   1    COLLSCAN:全表扫描
   2    SORT:排序
   3    IXSCAN:索引扫描
   4    SUBPLA:未使用到索引的$or查询的stage返回
  第二部分
   1    nReturned:实际返回的行数
   2    totalKeysExamined:索引扫描的行数
   3    totalDocsExamined:非索引扫描的行数
         nReturned=totalKeysExamined & totalDocsExamined=0->我理解的是覆盖索引
         nReturned=totalKeysExamined=totalDocsExamined
  日志
   1 keysExamined  索引扫描行数
   2 docsExamined  文档扫描行数
   3 ntreturned  实际返回的行数
   4 reslen:返回的结果集大小,byte数
   5 keyUpdates:该查询更新的索引键数目。
   6numYields:该查询为其它查询让出锁的次数。
四 相关说明 skip    
  1 find().skip().limit() 来实现“翻页”功能 skip的作用是跳过N行,这里我们可知,类似mysql的limit,skip的值越大,cpu消耗越高,因为要跳过的行数太多
  2 skip和limit操作在分片集群架构下是在mongos进行处理,并非mongod实例上,这点要注意先汇总再进行额外操作
  3 cursor.s kip ()方法通常很 昂贵,因为它需要 务器从集合或索引的开始处遍历,以便在开始
返回结果之前获取偏移或跳过位置随着偏移量的增加 cursor.skip ()的运行将变得更慢 并且CPU 密集度更高 对于较大的集合,cursor.skip ()可能会成为 I/O 瓶颈.尽量不要使用skip,用别的方式代替
五 执行计划
   默认 queryPlanner
   扩展信息 executionStats:会返回最佳执行计划的一些统计信息 mongo日志展示的就是这个

posted @ 2018-12-12 11:31  开心的蛋黄派  阅读(758)  评论(0编辑  收藏  举报