MySQL索引知识点总结
MySQL索引知识点总结
什么是索引
索引是数据库中用于加速数据检索的数据结构,类似于书的目录。合理的索引可以大幅提升查询性能。
索引的分类
按数据结构
- B+Tree索引:MySQL默认索引类型,适用于范围查询
- Hash索引:适用于等值查询,Memory引擎支持
- 全文索引:适用于文本搜索
- R-Tree索引:适用于空间数据
按存储方式
- 聚簇索引:数据与索引存储在一起,每个表只能有一个
- 非聚簇索引:索引与数据分离,通过指针关联
按字段特性
- 主键索引:不允许重复,不允许为空
- 唯一索引:允许NULL,但不允许重复
- 普通索引:允许重复
- 前缀索引:索引字段前缀部分
索引的优缺点
优点
- 加快数据检索速度
- 减少IO操作
- 加速表连接和排序
缺点
- 占用磁盘空间
- 增加写操作的开销(INSERT/UPDATE/DELETE)
- 过多索引会降低维护效率
何时创建索引
- WHERE子句中频繁使用的字段
- JOIN操作的连接字段
- ORDER BY和GROUP BY的字段
- 区分度高的字段
何时避免使用索引
- 数据量少的表
- 频繁更新的字段
- 区分度低的字段(如性别、状态)
- 不需要查询的字段
索引使用技巧
1. 覆盖索引
查询的列都在索引中,无需回表
1 | SELECT id, name FROM user WHERE name = '张三'; |
2. 最左前缀原则
复合索引遵循最左前缀,跳跃会导致索引失效
1 | -- 索引 (a, b, c) |
3. 索引下推
在索引层面过滤数据,减少回表次数
索引失效的常见情况
- 使用函数或运算
- 类型转换
- 使用OR连接(部分情况)
- 模糊查询以%开头
- 隐式类型转换
性能优化建议
- 分析慢查询日志
- 使用EXPLAIN分析执行计划
- 避免SELECT *
- 控制索引数量(建议不超过5个)
- 定期维护碎片
总结
索引是优化数据库查询的关键技术。需要根据实际业务场景合理设计索引,同时注意索引带来的负面影响。