数据库大揭秘:10张图告诉你MySQL为什么选B+树做索引?( 四 )


实际应用中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 你仔细品 。
数据库大揭秘:10张图告诉你MySQL为什么选B+树做索引?

文章插图
 
虽然没有MySQL的使用普及程度那么高,用B树实现索引的MongoDB很多大公司也都有使用 。
数据库大揭秘:10张图告诉你MySQL为什么选B+树做索引?

文章插图
 
使用客户
脱离业务场景谈具体实现都是耍流氓 。正是由于关系型数据库和非关系型数据库应用场景的不同,工程实现上最终会在损失和收益中找到平衡点,使得B树和B+树在不同数据库上有各自的用武之地 。
所以下次面试和面试官夸MySQL B+树索引好处的时候,注意别把 B 树喷的太惨,以防面试官来个回马枪,让你说说为啥MongoDB还要用B树来实现索引?这时候虽然你心里笑开了花,还是要假装再思考下,愣着干嘛,接着继续吹B树啊 。
【数据库大揭秘:10张图告诉你MySQL为什么选B+树做索引?】感谢各位的阅读,文章的目的是分享对知识的理解,技术类文章我都会反复求证以求最大程度保证准确性,若文中出现明显纰漏也欢迎指出,我们一起在探讨中学习 。


推荐阅读