如何优化 MySQL 索引以提高查询性能?
MySQL 索引优化 完整总结(面试 / 实操通用,精简好背)
一、合理创建索引
高频查询字段建索引
WHERE、JOIN、ORDER BY、GROUP BY 字段优先建立索引。
选择性高的字段建索引
区分度越高(如手机号、身份证)索引效果越好;
性别、状态等低基数字段不适合单独建索引。
优先使用复合索引
多字段查询时,建立复合索引,遵循最左前缀原则。
二、遵循复合索引设计原则
等值条件放前面,范围条件放后面(
=>in>like 前缀>range)。频繁查询字段前置,避免索引断裂。
避免冗余索引,合并重复、重叠索引。
三、避免索引失效(关键优化)
索引列不做函数、运算、类型转换。
LIKE禁止左模糊%xxx。减少
!=、<>、not in、is not null。OR两侧字段都要有索引,否则全失效。杜绝隐式类型转换(字符串字段加引号)。
四、优化索引字段设计
字段长度尽量小
用 tinyint、varchar (短长度),减少索引占用空间。
主键建议使用自增 int/bigint,不要用长字符串、UUID。
优先覆盖索引
查询字段全部包含在索引中,避免回表(Extra:Using index)。
五、SQL 语句优化
禁止
select *,只查需要字段,配合覆盖索引。分页深分页优化:避免
limit 100000,10。减少关联查询,JOIN 字段必须建立索引。
合理限制结果集,避免大结果集扫描。
六、维护与优化
定期使用
ANALYZE TABLE更新索引统计信息。清理无用、长期不使用的索引,减少写入开销。
大表避免频繁新增 / 删除索引,低峰期维护。
读写分离:读走索引优化,写减少索引数量。
七、限制索引数量
极简背诵版
高频筛选、排序、联表字段建索引;
复合索引遵守最左前缀,等值在前、范围在后;
杜绝索引列运算、左模糊、隐式转换防止失效;
设计覆盖索引,减少回表,禁用 select *;
精简索引、删除冗余,平衡查询与写入性能。



