B树和B+树的理解
可以从以下几个方面去理解
第一个:B树和B+树的产生背景
当我们执行一个select查询语句时,InnoDB需要从磁盘上去读取数据,都知道磁盘IO慢如蜗牛
了解一下磁盘的工作机制就知道 当我们需要从磁盘中去获取一条数据
首先需要系统把数据的逻辑地址传给磁盘,磁盘控制线路按照寻址的逻辑,把逻辑地址翻译成物理地址
从而确定要读取数据在那个磁道那个扇区,为了读取到对应扇区的数据,需要把磁头放在对应的扇区上面
为了实现这样一个点 就需要磁盘不断的去旋转,把目标扇区旋转到磁头下面,使得磁头能够找到对应的磁道
这里的寻道时间和旋转时间是有一个大的损耗,也是磁盘IO慢的原因
第二个:B树和B+树产生的意义
因为磁盘IO很慢,所以他产生的主要意义是,在查询时 减少磁盘IO 提高查询的效率
第三个:什么事B树什么是B+树
B树是由二叉树、二叉查找树进化而来的多路平衡查找树
所谓二叉树是指每个节点最多支持两个分叉 相比于单向链表来说他多了一个分支,
二叉查找树是指在二叉树的基础上去增加了一个规则,左子树的所有子节点都小于根节点,
右子树的所有子节点都要大于根节点;二叉查找树可能会出现斜树的问题,导致时间复杂度增加,
因此又引入了平衡二叉树机制:它具有二叉查找树的所有特点。又增加了一个规则,
他左右两个子树的高度差绝对值不能超过1,平衡二叉树为了达到这样一个平衡,
所以引入了左旋右旋机制去实现输的平衡
而B树他是一种多路平衡查找树,他满足平衡二叉树的规则同时又拥有更多的子树,子树的数量
取决于关键字的数量,
所谓B+树是在B树的基础上做了增强,最大区别有两点:第一个B树的数据存储在每个节点上
而B+树是吧数据存储在叶子节点上,并通过连表的方式把叶子节点的所有数据进行 一个连接
第二点:B+树的子路数量等于关键字的数量
综上所述:B+树比B树更矮更胖 ,数的高度就是磁盘IO的次数,通过减少磁盘IO,
从而在mysql中有更好的查找性能
红黑树:
散列表:
链表:
队列:
栈: