4、mysql为什么用B+tree

B-Tree

B树是一种多路平衡搜索树,但是B树允许每个节点上可以存放更多的数据,也允许每个节点有更多的子节点
4、mysql为什么用B+tree_第1张图片
B树的特点:

  • 所有的键值分布在整个树中
  • 任何关键字只出现在1个节点中
  • 搜索可能在非叶子节点中结束
  • B-Tree 有一个度的概念,就是一个节点中最多存储的索引数据,如果达到这个度的 15/16的时候,就会分叉。

B+Tree

B+Tree是B树的变种
4、mysql为什么用B+tree_第2张图片

B+Tree特点

  • 数据都存储在叶子节点,非叶子节点不存储真正的数据
  • 非叶子节点中的数据,都能在叶子节点中找到(关键字有可能出现在2处)。
  • 为所有的叶子节点增加了一个链指针

为什么用B+Tree

  • Mysql是基于磁盘的数据库,索引是以索引文件存在于磁盘中,索引的查找就会涉及到磁盘的IO,
    磁盘的IO消耗要比内存的IO消耗高几个数量级,所以查询索引的时候,要尽量减少IO的次数

  • 局部性原理与磁盘预读
    为了提升效率,要尽量减少磁盘IO的次数,实际中,磁盘并不是每次都是按需读取,而是每次都会预读,磁盘读取完数据后,再会多读一部分数据到磁盘中。这样的理论依据是计算机科学中的局部性原理
    局部性原理:
    1)当一个数据被用到时,其周围的数据也会马上被用到
    2) 程序运行期间所需要的数据通常比较集中

  • 减少寻道时间,只需要很少的旋转时间
    磁盘顺序读取的效率很高,而且B+Tree中的数据都存在叶子节点,并且叶子节点中的数据都是连续的,所以预读的时候,不需要寻道时间,只需要很少的旋转时间
    磁盘存取原理:1:寻道时间(速度慢,费时) 2:旋转时间(速度较快)
    4、mysql为什么用B+tree_第3张图片4、mysql为什么用B+tree_第4张图片

  • Mysql(默认InnoDB存储引擎),将记录按照页的方式存储,每页默认16K(大小可以修改),Linux是4K

B+Tree的优势
1)B+Tree更适合磁盘存储,因为非叶子节点不存储数据,所以一个节点存储的数据量更大,IO效率更高,一次IO的数据量更大
2)Mysql是关系型数据库,经常会按照区间来访问某个搜索列,B+Tree的叶子节点增加了链指针,将强了区间访问性,所以B+Tree更适合范围查找

你可能感兴趣的:(MySQL)