MySQL之索引详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之索引详解相关的知识,希望对你有一定的参考价值。
这篇博客将要阐述为什么使用b+树作为索引,而不是b树或者其他树
1.什么是b树
(图片来自网络)
b树相关特性:⑴关键字分布在整棵树中
⑵任何一个关键字只出现在一个节点上
⑶搜索可能在非叶子节点上结束
⑷搜索性能等价于在关键字全集内做二分查找
2.什么是b+树
(图片来自网络)
b+树相关特性:⑴非叶子节点的子树指针与关键字个数相同
⑵b+树只有在到达叶子节点才会命中,其性能也等价于在关键字全集做二分查找
⑶所有关键字都出现在叶子节点的链表中,且链表中关键字恰好有序
⑷不可能在非叶子节点命中
⑸非叶子节点相当于叶子节点的索引,叶子节点相当于数据层
3.为什么使用b/b+树
背景:索引很大,一般都不存放于内存中,而是以文件的形式存放在磁盘中,所以索引的优劣主要看磁盘I/O的存取次数
(磁盘图来自网络)
⑴读取原理:
①磁盘读取时,系统会根据数据逻辑地址传给磁盘,磁盘控制电路会解析出物理地址,即分析出哪个磁道哪个扇区
②为了减小I/O操作,磁盘读取每次都会预读,大小通常为页的整数倍(4k),即使每次是需要读取一个字节,磁盘也会读取一页的数据(4k)放入内存。
(在设计的时,数据库设计者将树的一个节点设计成一页的数据)
⑵为什么使用b+树而非b树:
①对b树而言,如果一次简述需要访问4个节点,数据库设计者把节点大小设计成一页,读取一个节点需要一个I/O操作,那么最多需要3次I/O操作(根节点常存于内存)。综上所述,我们可以得到结论,b-树相对普通树而言,其节点的关键字多,所以其树高也就越低,存取时I/O次数也就越少。
②对b+树而言,b+树优于b树的点就在于其非叶子节点只能存储key,而不存储关键字,这就大大减小了非叶子节点的,每个节点也就能够存放更多记录(其对应的索引),树也就更矮,I/O操作也就越少。
以上是关于MySQL之索引详解的主要内容,如果未能解决你的问题,请参考以下文章