前言
Mysql利用索引提升查询效率,是一个老生常谈的话题了。那么索引能够提升性能的本质到底是什么呢?
二级索引的特点
B+树结构、前导列二者共同构成了这样两个核心特性:
- 局部有序特性
- 数据紧凑的特性
优化了什么本质问题呢?
局部有序
- 减少排序,降低 CPU、内存Buffer、磁盘临时文件、磁盘文件与内存 IO 换入换出之间的消耗。
- 快速定位范围区间左侧边界(正序),减少查找数据也的次数。
数据紧凑特性
- 利用前导列的数据,可以减少回表导致的磁盘随机IO次数。
- 单位存储内存储的数据更多,减少顺序遍历时,磁盘IO次数加载次数。
比如覆盖索引、索引下推,就是利用这种两种特性。
然后索引合并、最左匹配等原则,都是建立在这两个核心特性之上。 而这两个核心特性的本质,就是减少资源的消耗。毕竟,所有的性能问题,本质上都是资源的问题。 而 Mysql 的性能问题,本质上就是一个磁盘 IO 密集型的问题。