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

  • 相关阅读:
    洛谷P6276 [USACO20OPEN]Exercise P(生成函数)
    牛顿迭代求逆元
    线性基求交
    我卷我自己加强
    AGC013 简要题解
    LOJ#6074 「2017 山东一轮集训 Day6」
    JAVA根据下载地址获取文件的Base64
    JS 作用链,箭头函数 this 取值
    Leetcode 1249 移除无效的括号
    Vue的数据绑定
  • 原文地址:https://www.cnblogs.com/tiancai/p/13711941.html
Copyright © 2011-2022 走看看