• 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+ 树啦。

  • 相关阅读:
    趁热讲讲skin.xml支持的标签和attributes
    如何配置和编译ogre 1.7.0 + cegui 0.7.1
    关于OGRE基础教程6中CEGUI的layout文件can not locate的问题
    skin.xml皮肤配置讲解
    OCX控件注册相关(检查是否注册,注册,反注册)
    重回博客园继续我的 GUI库
    窗口类的定义
    UI库需要完成的任务
    屏幕截图代码
    深入C++的默认构造函数1
  • 原文地址:https://www.cnblogs.com/supertonny/p/10491716.html
Copyright © 2020-2023  润新知