mysql为什么会使用B+树来做索引

二叉查询树

  • 二叉查询树就是一颗已经排序好的二叉树 不能有相等的元素, 由于树的特性, 它能够使得查找有O(n)的时间复杂度最好的情况下能降到O(lg n), 它的缺点是如果二叉查询树不平衡, 会导致时间复杂度又会重新逼近与O(n). 比如树只有一边分支的情况下, 查询的效率就变得同两边一样了

二叉平衡树(AVL)

  • 而二叉平衡树就是使得对于除叶节点外的任意节点, 其左右子树的高度差最多为1, 这样就能保证它的查询效率稳定在O(lg n)了. 但插入删除时维护二叉平衡树使得它保持原来的性质的开销非常大, 使得只要涉及到这两种操作, 人们就根本不会考虑这种最原始的二叉平衡树, 于是有了 红黑树

红黑树

  • 红黑树给原来的二叉平衡树增加了几条性质, 使得它能够在插入删除元素的时候能够快速地局部平衡, 它只能保证对于任何节点沿着任意路径到达叶节点的路径长度, 这些路径长度之间最长的不会超过最短的二倍. 因此, 这是一种弱平衡.
  • 它增加了哪几条性质呢?
    1. 每个节点都有颜色(红/黑)
    2. 根节点和叶节点的颜色是黑色
    3. 红节点的儿子节点全为黑节点, 黑节点的儿子节点要么全红, 要么全黑(包含叶子节点时除外)
    4. 对于每个节点到达叶子节点的不同路径包含相同数目的黑节点(路径向下)

B树

  • B树是一颗多叉树, 用它来对比红黑树会有什么优势和劣势呢?
    1. 在多个节点上存储信息, 分多个叉, 使得B树的层数更少
    2. 因为是平衡排序树, 查询效率稳定

B+树

  • 相对于B树, B+树将数据全部存放在叶子节点, 其余节点存放的是索引信息, 这样B+数的内部节点相对于B树的内部节点更小, 同一个盘块能够放入更多的节点, 一次性读入内存的节点数据更多, 查询效率更稳定, 磁盘读写代价更低

为什么MySQL为什么使用B+树作为索引存储结构

  • 树的层数更少, 查找到某个节点需要进行的磁盘I/O步骤, 平均下来就更少 多叉树
  • 信息全部存放在叶子节点, 方便扫描
  • 查询效率稳定
    参考文章

你可能感兴趣的:(数据库,mysql)