索引概述
一、介绍
**索引(index)**是帮助 MySQL 高效获取数据的数据结构(有序)。
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
二、优缺点
| 优势 | 劣势 |
|---|---|
| 提高数据检索的效率,降低数据库的 IO 成本 | 索引列也是要占用空间的 |
| 通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 的消耗 | 索引大大提高查询效率,同时也降低更新表的速度(对表进行 INSERT、UPDATE、DELETE 时效率降低) |
三、有无索引对比
以 select * from user where age = 45 为例:
| 无索引 | 有索引 | |
|---|---|---|
| 查找方式 | 全表扫描,逐行比对 | 按有序结构定位,快速找到目标行 |
| 效率 | 数据量大时极慢 | 高效 |
备注:用二叉树来示意只是为了理解,并不是真实的索引结构(真实结构见 索引结构)。