美文网首页
mongo回顾(五)

mongo回顾(五)

作者: supremecsp | 来源:发表于2021-04-11 21:03 被阅读0次

上一篇聊到了索引类型和索引属性,今天来聊聊索引的性能分析
首先说说索引的分析工具explain,我常用的工具是MongoDB compass,在explain标签页就可以得到分析内容

image.png
其中返回结果有三种
queryPlanner,executionStats,allPlansExecution
[https://blog.csdn.net/u014231523/article/details/103437913]
具体可以看,写的很详细(https://blog.csdn.net/u014231523/article/details/103437913) image.png
结果输出主要查看的几个点有stage(执行状态),nReturned(返回文档数),totalKeysExamined(索引扫描文档数,为0未使用索引),totalDocsExamined(扫描文档数)
executionTimeMillis(执行时间)
https://docs.mongodb.com/manual/reference/explain-results/
执行计划的返回结果中尽量不要出现以下stage:
COLLSCAN(全表扫描)
SORT(使用sort但是无index)
不合理的SKIP
SUBPLA(未用到index的$or)
COUNTSCAN(不使用index进行count)

如果一个查询涉及到两个索引,mongo是怎么判断选哪一个?


image.png

索引交集和复合索引的区别
MongoDB可以使用多个索引的交集来完成查询,一个文档的查询涉及到多个索引

image.png
是否用上索引交集可以看看explain的索引状态是否为AND_SORTED或AND_HASH
由于复合索引之前说过有最左匹配原则
{ status: 1, ord_date: -1 }当前索引无法用于
db.orders.find( { ord_date: { $gt: new Date("2014-02-01") } } )
db.orders.find( { } ).sort( { ord_date: 1 } )
但如果拆成两个索引不仅交集可以用上,以上两个查询也可以用上
当然复合索引(覆盖索引)对不用回表的情况,而且排序的性能支持的比较好,若是该表数据量太大,且需要多种索引使用情况,可以考虑用索引交集代替覆盖索引
https://docs.mongodb.com/manual/core/index-intersection/
创建索引是比较昂贵的操作,前台创建的话会阻塞其他操作,可以在后台创建
db.member.createIndex( { city: 1}, {background: true} )

最后补一个知识点,不管是TTL还是mongo的remove操作,和mysql,oracle delete操作一样,磁盘空间并不会被回收,mongo要回收需要执行compact,由于compact会加库级锁,一般这个操作在从库进行

相关文章

  • mongo回顾(五)

    上一篇聊到了索引类型和索引属性,今天来聊聊索引的性能分析首先说说索引的分析工具explain,我常用的工具是Mon...

  • mongo回顾(四)

    上回聊到mongo索引采用了B树,而且采用的原因。今天具体聊聊mongo中的索引。MongoDB defines ...

  • mongo回顾(一)

    这个月轮到我做技术分享,由于关系型数据库被分享了好几次了,那我就挑个非关系型的来分享吧,分享之前对mongo做一些...

  • mongo回顾(二)

    上回提到,对比关系型数据库的全部,非关系型数据库就像偏科选手。但是非关系型数据库也有全能型选手,那就是mongod...

  • The Road of DBA 19_NoSQL_Elastic

    mongo回顾 2、Elasticsearch介绍 2.1 2.2、Elasticsearch功能 2.3、特点 ...

  • mongo回顾(十:日志)

    上一篇留下了一个疑问,mongo是内存数据库吗? 我们知道,redis是内存数据库,数据都保存在内存中,对于数据的...

  • Timed out after 30000 ms while w

    今天使用mongo-java-drive写连接mongo的客户端,着实被上面那个错坑了一把。回顾一下解决过程: 报...

  • mongo回顾(七:聚合查询)

    上一篇简单介绍了mongo的增删改查,今天来聊聊mongo的聚合操作 什么是 MongoDB 聚合框架 Mongo...

  • mongo回顾(十四:复制集)

    首先简单的搭建mongodb复制集(一主两从),依旧采用docker1,docker pull mongo2,do...

  • mongo回顾(十二:原子性)

    技术分享之后好久没写简书了,接下来会把我所知道的mongo知识点补完,这篇文章主要聊聊mongodb的事务 mon...

网友评论

      本文标题:mongo回顾(五)

      本文链接:https://www.haomeiwen.com/subject/waqakltx.html