zoukankan      html  css  js  c++  java
  • 以B tree和B+ tree的区别来分析mysql索引实现

    B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下:

    Paste_Image.png

    B树的特点:
    (1)所有键值分布在整个树中
    (2)任何关键字出现且只出现在一个节点中
    (3)搜索有可能在非叶子节点结束
    (4)在关键字全集内做一次查找,性能逼近二分查找算法

    B+树是B树的变体,也是一种多路平衡查找树,B+树的示意图为:

    Paste_Image.png

    从图中也可以看到,B+树与B树的不同在于:
    (1)所有关键字存储在叶子节点,非叶子节点不存储真正的data
    (2)为所有叶子节点增加了一个链指针

    那么问题来了,为什么用B/B+树这种结构来实现索引呢??
    答:红黑树等结构也可以用来实现索引,但是文件系统及数据库系统普遍使用B/B+树结构来实现索引。mysql是基于磁盘的数据库,索引是以索引文件的形式存在于磁盘中的,索引的查找过程就会涉及到磁盘IO(为什么涉及到磁盘IO请看文章后面的附加理解部分)消耗,磁盘IO的消耗相比较于内存IO的消耗要高好几个数量级,所以索引的组织结构要设计得在查找关键字时要尽量减少磁盘IO的次数。为什么要使用B/B+树,跟磁盘的存储原理有关。
    局部性原理与磁盘预读
    为了提升效率,要尽量减少磁盘IO的次数。实际过程中,磁盘并不是每次严格按需读取,而是每次都会预读。磁盘读取完需要的数据后,会按顺序再多读一部分数据到内存中,这样做的理论依据是计算机科学中注明的局部性原理:




    链接:https://www.jianshu.com/p/0371c9569736

  • 相关阅读:
    格式化日期---获取年月日升级版
    时间格式转换
    Python求两个有序数组的中位数的几种方法
    pyinstaller打包时包含资源文件
    PyQt5自定义组件之飞机水平仪
    Python获取磁盘剩余空间
    PyQt5自定义组件之信号强度
    Python字典的实现原理
    获取元素相对浏览器窗口的偏移坐标
    HTML/JavaScript实现地图以鼠标为圆心缩放和移动
  • 原文地址:https://www.cnblogs.com/tiancai/p/13711941.html
Copyright © 2011-2022 走看看