MySQL之索引详解

这篇博客将要阐述为什么使用b+树作为索引,而不是b树或者其他树

1.什么是b树

MySQL之索引详解

(图片来自网络)

b树相关特性:⑴关键字分布在整棵树中

⑵任何一个关键字只出现在一个节点上

⑶搜索可能在非叶子节点上结束

⑷搜索性能等价于在关键字全集内做二分查找

2.什么是b+树

MySQL之索引详解

(图片来自网络)

b+树相关特性:⑴非叶子节点的子树指针与关键字个数相同

⑵b+树只有在到达叶子节点才会命中,其性能也等价于在关键字全集做二分查找

⑶所有关键字都出现在叶子节点的链表中,且链表中关键字恰好有序

⑷不可能在非叶子节点命中

⑸非叶子节点相当于叶子节点的索引,叶子节点相当于数据层

3.为什么使用b/b+树

背景:索引很大,一般都不存放于内存中,而是以文件的形式存放在磁盘中,所以索引的优劣主要看磁盘I/O的存取次数

MySQL之索引详解

(磁盘图来自网络)

⑴读取原理:

①磁盘读取时,系统会根据数据逻辑地址传给磁盘,磁盘控制电路会解析出物理地址,即分析出哪个磁道哪个扇区

②为了减小I/O操作,磁盘读取每次都会预读,大小通常为页的整数倍(4k),即使每次是需要读取一个字节,磁盘也会读取一页的数据(4k)放入内存。

(在设计的时,数据库设计者将树的一个节点设计成一页的数据)

⑵为什么使用b+树而非b树:

①对b树而言,如果一次简述需要访问4个节点,数据库设计者把节点大小设计成一页,读取一个节点需要一个I/O操作,那么最多需要3次I/O操作(根节点常存于内存)。综上所述,我们可以得到结论,b-树相对普通树而言,其节点的关键字多,所以其树高也就越低,存取时I/O次数也就越少。

②对b+树而言,b+树优于b树的点就在于其非叶子节点只能存储key,而不存储关键字,这就大大减小了非叶子节点的,每个节点也就能够存放更多记录(其对应的索引),树也就更矮,I/O操作也就越少。

上一篇:git 提交代码场景


下一篇:Java Web学习笔记-Servle生命周期