什么是索引
MySql官方对索引的定义为:索引是帮助MySql高效获取数据的数据结构。
所以索引的本质就是:索引是数据结构
索引的优势
- 提高数据检索的效率,减低数据库的IO成本。(检索查询快)
- 减低数据排序的成本,减低了CPU的消耗。(排序快)
索引的劣势
- 写操作速度会变慢(insert/update/delete)
- 占用磁盘空间(索引存放的地方)
哪些情况需要创建索引
- 主键自动建立唯一索引
- 频繁作为查询条件的字段应该创建索引
- 查询与其它表关联的字段,外键关系建立索引(多表关联查询)
- 单键、组合索引的选择问题,组合索引性价比更高(mysql自动选择最优)
- 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组字段((分组order by )包含(排序group by))
哪些情况不要创建索引
- 表记录太少
- 经常增删改的表或者字段(例如电商项目的用户余额)
- Where条件里用不到的字段不创建索引
- 过滤性不好的不适合建索引(手机号、身份证号之类过滤性好)