- 详细流程图
- 优势 ```
类似于大学图书馆建书目索引 , 提高数据检索的效率 , 降低数据库的IO成本
通过索引列对数据进行排序 , 降低数据排序成本 , 降低了 CPU 的消耗 ```
劣势 ```
实际上索引也是一张表 , 该表保存了主键于索引字段 , 并指向实体表的记录 , 所以索引列也是要占空间的
虽然索引大大提高了查询速度 , 同时却会降低更新表的速度 , 如对表进行insert , update 和 delete; 因为更新表时 , MySQL 不仅要保存数据 , 还要保存一下索引文件每次更新添加了索引列的字段 , 都会调整因为更新所带来的键值变化后的索引信息
索引直说提高效率的一个因素 , 如果你的 MySQl 有大量数据的表 , 就需要花费时间研究建立优秀的索引 或优化查询语句 ```
哪些情况需要创建索引 ```
主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询中 与其他表关联的字段 , 外键关系建立索引
频繁更新的字段不适合创建索引
where 中不用到的字段 不用创建索引
单键/组合索引的选择问题, who? ( 在高并发下倾向创建组合索引 )
查询中排序的字段 , 排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段 ```
哪些情况不需要创建索引 ```
表记录太少
进场增删改的表
数据重复且分布平均的表字段 , 因此应该只为最近常查询和最近常排序的数据列表建立索引
注意: 如果某个数据列包含许多重复的内容 , 为它建立索引就没有太大的实际效果
```
