MySQL索引详解:什么是索引?为什么能提升查询效率? 前言只要学MySQL索引是性能优化的核心。很多新手只知道“加索引查询快”但完全不懂索引到底是什么为什么能提速不加索引为什么慢这篇文章用通俗白话图书馆类比底层原理零基础彻底搞懂索引本质为后续索引优化打下基础。一、什么是 MySQL 索引通俗理解索引就是数据库的「目录」。类比一本厚厚的书如果你想找某一页内容没有目录需要逐页翻全表扫描有目录直接定位页码索引查询。MySQL 索引本质提前给数据表建立有序的数据结构用来快速定位数据行避免全表扫描。二、没有索引会发生什么当你执行SELECT * FROM user WHERE phone 13800138000;无索引MySQL 从第1行遍历到最后一行逐条对比也就是全表扫描。数据量小没感觉数据量几十万、上百万时查询速度会断崖式下跌。三、为什么索引能大幅提升查询速度1. 索引是有序结构MySQL 默认使用BTree结构存储索引数据数据是从小到大排序的。有序 可以二分查找全表扫描时间复杂度 O(n)索引查找时间复杂度 O(log n)百万级数据下效率差距成千上万倍。2. 索引只查目录不查整行索引只保存索引字段值 数据行地址体积远小于整表数据。查找时只需要在索引树上快速定位再回表取数据IO 开销极小。3. 索引可以缓存热点索引会被载入内存内存查询速度远快于磁盘扫描。四、索引是不是越多越好核心误区绝对不是索引是「查询快、增删改慢」原因查询索引加速新增/修改/删除需要同步更新索引树索引越多维护成本越高开发原则查询多、更新少的字段建索引频繁更新的字段少建索引。五、索引存储结构简单说明MySQL InnoDB 默认BTree所有数据都在叶子节点叶子节点有序、链表相连适合范围查询、排序、分页也是为什么 MySQL 非常适合业务查询场景。六、总结索引 数据表的目录用来快速定位数据无索引 全表逐行扫描大数据量极慢索引利用 BTree 有序结构实现二分查找大幅提速索引提升查询、降低增删改性能不能乱建、多建。