• 数据库的总体架构
存储管理 缓存机制 sql解析 日志管理
权限划分 容灾机制 索引管理 锁机制
存储
(文件系统)
  • 索引
    快速查找数据 避免全表扫描

  • 可以建立索引的字段:
    主键,唯一键等(可以把该记录限定在一定查找范围内的字段)

  • 索引的数据结构

    • 二叉搜索树
    • B树
    • B+树
    • Hash
  • 二叉搜索树
    左子树<根<右子树
    缺点:可能出现线性,使io增大,降低查找效率

  • B树 (平衡多路查找树

    • 要点:
      • 所有节点的关键字升序
      • 每个节点都存有关键字和关键字对应的数据
      • 关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它
    • 插入:
      • 判断当前结点key的个数是否小于等于m-1,如果满足,直接插入即可,如果不满足,将节点的中间的key将这个节点分为左右两部分,中间的节点放到父节点中即可
    • 删除(叶子节点的删除和非叶子节点的删除)
      • 叶子节点删除:
        • 直接删除
        • 若小于m/2,就像兄弟节点借:将对应父节点移到删除的节点对应位置,将兄弟节点移至父节点对应位置。
        • 若兄弟节点借不了,将父节点移至删除节点的对应位置,然后拼接兄弟节点
      • 删除非叶子节点:
        • 将后继子节点移至删除节点对应位置,然后类上删除叶子节点
  • B+树

    • 要点
      • 类似于B树
      • 非叶子节点不存储数据,数据全存在叶子节点上
      • 叶子节点的关键字升序,左边结尾数据都会保存右边节点开始数据的指针
      • 父节点存有右孩子的第一个元素的关键字 Mysql总结 --1
        Mysql总结 --1
    • 优点
      • 有利于范围统计
      • 可以进行遍历
    • 插入
      • 当节点元素数量大于m-1的时候,按中间元素分裂成左右两部分,中间元素分裂到父节点当做索引存储,但是,本身中间元素还是分裂右边这一部分的
    • 删除
      • 叶子节点有指针的存在,向兄弟节点借元素时,不需要通过父节点了,而是可以直接通过兄弟节移动即可(前提是兄弟节点的元素大于m/2),然后更新父节点的索引;如果兄弟节点的元素不大于m/2(兄弟节点也没有多余的元素),则将当前节点和兄弟节点合并,并且删除父节点中的key
  • B树 和 B+树 比较

    • 磁盘读写代价更低
    • 查询效率更稳定
    • 更有利于数据库的扫描



  • Hash

    • 通过散列表存储
    • 缺点:
      • 仅能满足 ”=“ ”IN“ 不能使用范围查询(hash后,大小可能发生变化)
      • 不能实现数据的排序操作
      • 不能利用部分索引键查询
      • 不能遍历表
      • hash碰撞频率高后,性能会降低

相关文章:

  • 2021-08-02
  • 2021-11-12
  • 2021-04-18
  • 2021-09-12
  • 2021-09-06
  • 2021-03-01
猜你喜欢
  • 2022-01-11
  • 2022-12-23
  • 2022-03-10
  • 2021-08-21
  • 2021-08-24
  • 2021-08-20
  • 2021-06-08
相关资源
相似解决方案