实际应用中B+确实能够减少大量的磁盘IO,从而大大提高查询性能,而且由于B+树根节点的数据已经是排序好的双向链表,我们可以像链表一样遍历所有数据,非常适合范围查找和排序操作!
再谈B树B树索引并非一无是处 。虽然我们前面详细对比了在innoDB中使用B+树索引的优势,但不要以为B树就一无是处了,一种数据结构被设计出来肯定是有使用场景的需求,不然谁也不会闲着没事折腾出一个东西,你说对吧 。
事实上B树也被用于实现数据库索引,只不过不是在MySQL上 。在MongoDB的索引设计上就使用了B树做索引,什么是MongoDB呢?我不做过多介绍,感兴趣的可以下来了解一下,下面这段话来自MongoDB 英文Wiki
MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL).只需要知道它和MySQl不同,MongoDB是一种文档型的非关系型数据库,被划分为NoSql数据库,使用类似JSON的语法存储文档,熟悉Redis的同学应该很容易理解NoSQL的含义 。
因为关系型数据库比如 MySQL 经常需要执行遍历和范围查找的操作,B+树的特点正是迎合了这样的需求 。但是在MongoDB这样的NoSLQ数据库中,在数据表的设计层面就决定了不会有太多的遍历和范围查找,基本就是一个键对应一个值的单一查询 。
在MongoDB上的查找如果用B+树来实现索引的话,由于非叶子节点不存放数据,每次查询必须搜索到B+树的叶子节点才能获取到数据,时间复杂度是固定的树的高度 log n;
而如果用B树实现索引,由于每个节点都可以存放数据,幸运的话有可能不必找到叶子节点就能取得数据,复杂度更低,再来看下B树实现的索引,如果换作是 MongoDB 你仔细品 。

文章插图
虽然没有MySQL的使用普及程度那么高,用B树实现索引的MongoDB很多大公司也都有使用 。

文章插图
使用客户
脱离业务场景谈具体实现都是耍流氓 。正是由于关系型数据库和非关系型数据库应用场景的不同,工程实现上最终会在损失和收益中找到平衡点,使得B树和B+树在不同数据库上有各自的用武之地 。
所以下次面试和面试官夸MySQL B+树索引好处的时候,注意别把 B 树喷的太惨,以防面试官来个回马枪,让你说说为啥MongoDB还要用B树来实现索引?这时候虽然你心里笑开了花,还是要假装再思考下,愣着干嘛,接着继续吹B树啊 。
【数据库大揭秘:10张图告诉你MySQL为什么选B+树做索引?】感谢各位的阅读,文章的目的是分享对知识的理解,技术类文章我都会反复求证以求最大程度保证准确性,若文中出现明显纰漏也欢迎指出,我们一起在探讨中学习 。
推荐阅读
- 2020大话嘉年华纪念徽章
- 游戏股为什么大跌 为什么游戏板块大跌
- 白茶适合的人群,哪种人群适合白茶
- 普洱茶部分作用,普洱茶和皖西黄大茶功效与作用的区别
- 大一什么时候军训 2020大学军训一般多长时间
- 绿茶的保质期是多少,绿茶的保质期
- 藏式甜茶的做法,甜菊大麦茶的做法
- 大葱需肥规律 大葱的管理和施肥
- apk是什么文件
- 煲汤大全 4款汤不仅美味还有食疗效果
