MySQL 为什么使用 B+ 树来作索引,对比 B 树它的优点和缺点是什么
索引本身也是以文件的形式存储在磁盘上,索引查找过程中存在I/O消耗,采用B tree结构可以减少I/O。
# 磁盘存取原理
局部性原理与磁盘预读:当一个数据被用到时,其附近的数据也很快会被用到。 预读的长度一般为页的整数倍,主存和磁盘以页为单位交换数据。
磁盘和磁头构成了存取物理结构。同心圆环是磁道,磁道被划分成一个个段,叫扇区,扇区是最小存储单元。
i/o读取数据的过程:磁盘旋转到指定扇区,磁头移动到指定磁道。
所以减少磁盘旋转或者减少磁头移动就能减少i/o。
# B-/+Tree索引的性能分析
B Tree利用局部性原理可减少i/o次数。 根据B Tree定义可知,检索一次最多需要访问h个节点,h-1次i/o,h是树高,mysql设计者巧妙的将一个节点大小设置为等于一个页大小,每次新建节点都申请一个页的空间,这样就保证一个节点物理上也存储在一个页,这样每个节点只需要一次i/o就可以完全载入。
编辑 (opens new window)
上次更新: 2022/05/22, 00:01:01