• BST AVL RBT B- B+ 的一些理解


    BST(二叉查找树,排序二叉树),如果数据有序的话,组成的二叉树会形成单列的形式,导致查询效率低
    AVL(平衡二叉树) 使树的左右高度差的绝对值不超过2,保证了查询效率。但是插入和删除会带来多次旋转,导致效率低
    RBT(红黑树),是一种弱化的平衡二叉树,在插入、删除的时候,减少了旋转的次数
    B-树,由于二叉树只有两个子树,在磁盘上进行查找的时候,效率较低,所以出现了多分支的树,即B树(2-3树,2-3-4树)
    B+树,对B-树作了一些限制

    为什么数据库使用B树而不用AVL或者红黑树呢?
    AVL树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。
    既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?
    这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。
    AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?
    这就要牵扯到磁盘的存储原理了
    操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。
    也就是说,磁盘读写有一个最少内容的限制,即使我们只需要这个簇上的一个字节的内容,我们也要含着泪把一整个簇上的内容读完。
    那么,现在问题就来了

    一个父节点只有 2 个子节点,并不能填满一个簇上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树。
    由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!数据库设计的时候 B+ 树有多少个分支都是按照磁盘一个簇上最多能放多少节点设计的啊!
    所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。

  • 相关阅读:
    JavaScript正则表达式(四)
    JavaScript三元运算符以及运算符顺序
    JavaScript进制转换
    JavaScript赋值运算符和关系运算符
    JavaScript输出
    hadoop1.2.1的安装
    SSH免费登录
    使用java poi解析表格
    【深入理解JVM】:Java类继承关系中的初始化顺序
    解决yum安装mysql时Requires: libc.so.6(GLIBC_2.17)(64bit)
  • 原文地址:https://www.cnblogs.com/supertonny/p/10491716.html
Copyright © 2020-2023  润新知