一个工作8年的粉丝私信了我一个问题。
他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答。
问题是: “Mysql为什么使用B+Tree作为索引结构”
关于这个问题,看看普通人和高手的回答。
普通人:
B+数它的特征就是相对B数来说他的这个非叶子节点不存数据,所有的数据都存在叶子节点
相对于B数来说他的查询次数IO次数会更稳。
高手:
关于这个问题 ,我从几个方面来回答。
首先,常规的数据库存储引擎,一般都是采用B树或者B+树来实现索引的存储。
因为B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。
而对于数据库来说,所有的数据必然都是存储在磁盘上的,而磁盘IO的效率实际上是很低的,特别是在随机磁盘IO的情况下效率更低。
所以树的高度能够决定磁盘IO的次数,磁盘IO次数越少,对于性能的提升就越大,这也是为什么采用B树作为索引存储结构的原因。
但是在Mysql的InnoDB存储引擎里面,它用了一种增强的B树结构,也就是B+树来作为索引和数据的存储结构。
相比较于B树结构,B+树做了几个方面的优化。
- B+树的所有数据都存储在叶子节点,非叶子节点只存储索引。
- 叶子节点中的数据使用双向链表的方式进行关联。
</