【PHP面试题19】B-Tree和B+Tree的区别,以及B+Tree在MySQL中的应用

文章目录


一、前言

本文已收录于PHP全栈系列专栏:PHP面试专区。-
计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。

二、关于B-Tree和B+ Tree

2.1 B-Tree

在这里插入图片描述-
B-Tree是一种平衡树,它的定义比较简单,每一个节点都有m个子节点,每个节点从小到大排列,对于一个含有n个关键字的B Tree,可以分为logm(n)层,根节点也算一层,所以高度最多是logm(n),这保证了B Tree的查找效率。

2.2 B+Tree

在这里插入图片描述-
B+ Tree也是一种平衡树,与B Tree不同的是,B+ Tree在叶子节点上存放所有关键字,内部节点只存放关键字的索引。这样做优点在于:

  1. 内部节点的关键字比叶子节点少,可以让节点变得更小,一块磁盘能够存储的节点数量更多;
  2. 叶子节点形成一个有序链表,方便进行范围查询。

三、B Tree与B+ Tree的差异

3.1 叶子节点的差异

B Tree与B+ Tree的最大区别在于叶子节点存放的内容:B Tree的叶子节点既存放关键字索引,也存放数据;而B+ Tree的叶子节点只存放关键字和指向数据的指针。

3.2 数据访问的差异

B Tree和B+ Tree的索引实现原理相似,都是通过比较关键字大小进行节点的递归查找,不同之处在于,B Tree查找到目标关键字后就可以直接返回数据,而B+ Tree则需要通过叶子节点的指针再次访问磁盘才能返回数据。

3.3 范围查询的差异

B+ Tree天生自带范围查询优势,因为叶子节点形成的链表是有序的。而B Tree则需要进行全局遍历,效率较低。

四、Mysql中B+Tree的应用场景

Mysql中的索引是基于B+ Tree实现的,所以B+ Tree适用于Mysql中所有的索引,包括主键索引、唯一索引和普通索引等。

4.1 主键索引

主键索引是一个表中的主键或唯一索引,它可以用来保证表中每一行都具有唯一性。在Mysql中,如果没有主键或唯一索引,那么InnoDB存储引擎会默认生成一个6字节的ROWID作为主键。在Mysql中,主键索引是B+ Tree结构,它对于数据插入和修改的操作非常高效,同时也可以用来加速关联查询。

4.2 唯一索引

唯一索引是与主键索引类似的结构,它可以保证表中某一列或多列的唯一性,如果插入的数据违反了唯一性约束,则会触发错误。唯一索引与主键索引的区别在于,唯一索引允许null值。

4.3 普通索引

普通索引是最常用的索引类型,它可以加速查询某一列的操作。在Mysql中,普通索引也是B+ Tree结构,可以加速等值查询、范围查询和排序操作。

五、MySQL为什么使用B+Tree来做索引?

通过上面的对比,应该知道B-Tree和B+Tree的区别了。MySQL为什么要用B+Tree来做索引可以看下面的解释。-
在这里插入图片描述

总结

总之,B+ Tree是一种适用于磁盘存储的平衡树,由于在磁盘上读写数据的时间比在内存中读写数据慢,因此B+ Tree能够更好地适应磁盘存储,提高数据的读写效率。在Mysql中,B+ Tree被广泛应用于索引的实现,保证了数据库查询的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值