auto commit

This commit is contained in:
CyC2018
2020-05-27 00:36:34 +08:00
parent f84b140418
commit b76f6acddc
4 changed files with 22 additions and 40 deletions

View File

@ -48,23 +48,25 @@ B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具
进行查找操作时首先在根节点进行二分查找找到一个 key 所在的指针然后递归地在指针所指向的节点进行查找直到查找到叶子节点然后在叶子节点上进行二分查找找出 key 所对应的 data
插入删除操作会破坏平衡树的平衡性因此在插入删除操作之后需要对树进行一个分裂合并旋转等操作来维护平衡性
插入删除操作会破坏平衡树的平衡性因此在进行插入删除操作之后需要对树进行分裂合并旋转等操作来维护平衡性
### 3. 与红黑树的比较
红黑树等平衡树也可以用来实现索引但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构主要有以下两个原因
红黑树等平衡树也可以用来实现索引但是文件系统及数据库系统普遍采用 B+ Tree 作为索引结构这是因为使用 B+ 树访问磁盘数据有更高的性能
更少的查找次数
B+ 树有更低的树高
平衡树查找操作的时间复杂度和树高 h 相关O(h)=O(log<sub>d</sub>N)其中 d 为每个节点的出度
平衡树的树高 O(h)=O(log<sub>d</sub>N)其中 d 为每个节点的出度红黑树的出度为 2 B+ Tree 的出度一般都非常大所以红黑树的树高 h 很明显比 B+ Tree 大非常多
红黑树的出度为 2 B+ Tree 的出度一般都非常大所以红黑树的树高 h 很明显比 B+ Tree 大非常多查找的次数也就更多
磁盘访问原理
利用磁盘预读特性
操作系统一般将内存和磁盘分割成固定大小的块每一块称为一页内存与磁盘以页为单位交换数据数据库系统将索引的一个节点的大小设置为页的大小使得一次 I/O 就能完全载入一个节点
为了减少磁盘 I/O 操作磁盘往往不是严格按需读取而是每次都会预读预读过程中磁盘进行顺序读取顺序读取不需要进行磁盘寻道并且只需要很短的磁盘旋转时间速度会非常快
如果数据不在同一个磁盘块上那么通常需要移动制动手臂进行寻道而制动手臂因为其物理结构导致了移动效率低下从而增加磁盘数据读取时间B+ 树相对于红黑树有更低的树高进行寻道的次数与树高成正比在同一个磁盘块上进行访问只需要很短的磁盘旋转时间所以 B+ 树更适合磁盘数据的读取
操作系统一般将内存和磁盘分割成固定大小的块每一块称为一页内存与磁盘以页为单位交换数据数据库系统将索引的一个节点的大小设置为页的大小使得一次 I/O 就能完全载入一个节点并且可以利用预读特性相邻的节点也能够被预先载入
磁盘预读特性
为了减少磁盘 I/O 操作磁盘往往不是严格按需读取而是每次都会预读预读过程中磁盘进行顺序读取顺序读取不需要进行磁盘寻道并且只需要很短的磁盘旋转时间速度会非常快并且可以利用预读特性相邻的节点也能够被预先载入
## MySQL 索引