MongoDB - 索引

索引数据结构

MongoDB的索引和MySQL一样用的是B+树。由于在MySQL索引部分对B+树已经做了介绍,这里就不再描述啦,详见 MySQL - 存储&索引

虽然但是,很多地方都说MongoDB索引的数据结构是B-树,在我看了蛮多博客以及一些同学询问官方得到的回复,以及极客时间上MongoDB课程里对B-树更正为B+树的描述,应该用的就是B+树。

索引执行计划

索引执行计划
例如,当文档中有两个索引,查询语句在两个索引上都做了匹配,候选计划会让两个线程同时尝试两个索引看哪个跑得更快,就是最优计划。

explain

语法:

db.col.find({name:"Rachel"}).explain(true)

MongoDB 索引类型

  • 单键索引
  • 组合索引
  • 多值索引
  • 地理位置索引
  • 全文索引
  • TTL索引
  • 部分索引
  • 哈希索引

组合索引 Compound Index

组合索引的最佳方式:ESR原则

  • Equal 精确匹配方最前面
  • Sort 排序条件放中间
  • Range 范围匹配字段放最后面
    为什么要遵循ESR原则,可以看一下两个例子:

🌰Equal在前面很好理解,可以使得查找的索引项更少。
索引字段的影响例子1

🌰排序索引在范围索引前面,可以避免内存排序(如果数据量大会非常影响性能),只用做索引匹配。
索引字段的影响例子2

地理位置索引

地理位置索引

全文索引

全文索引

部分索引

部分索引

创建索引技巧

  • 后台创建索引
db.col.createIndex({"city":1}, {background:true})
  • 报表专用节点单独创建索引
    • 设置该从节点priority为0
    • 关闭该从节点
    • 单机模式启动
    • 添加索引
    • 关闭该从节点,以副本集模式启动
posted @   rachel_aoao  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示