MySQL索引优化的方法

2025年Java面试宝典抢先领:
链接 提取码: 9b3g
为什么索引优化是MySQL性能的关键?
面试被问"数据库慢查询怎么优化",十有八九要聊索引优化。MySQL的索引就像书的目录——用对了秒查数据,用错了全表扫描卡成狗。下面这些实战方法都是高频考点,看完你就能在面试官面前掰扯清楚。
一、覆盖索引:少读磁盘才是王道
核心:让索引直接返回数据,避免回表。比如查SELECT name FROM users WHERE age>20,如果给(age,name)建联合索引,引擎直接从索引树拿name值,比回主键索引快3倍以上。
避坑点:别用SELECT *!只查需要的字段,命中覆盖索引几率更高。
二、最左前缀原则:联合索引怎么用才生效?
联合索引(a,b,c)实际相当于建了(a)、(a,b)、(a,b,c)三个索引。如果查询条件跳过a直接查b,索引直接失效!
✅ 生效场景:
WHERE a=1 AND b=2
WHERE a=1 ORDER BY b
WHERE a=1 AND b>2 AND c=3`
❌ 失效场景:
WHERE b=2 -- 缺少a
WHERE a=1 AND c=3 -- 跳过b
三、函数操作:索引失效的隐形杀手
在索引字段上用函数(YEAR(create_time))、表达式(price*2>100)或类型转换,索引直接罢工!
优化方案:
- 计算操作移到等号右侧:
WHERE create_time>'2023-01-01' - 冗余存储计算字段:新建
price_double列存price*2的值
四、索引选择性:高区分度字段优先
索引选择性 = 不重复值/总行数。比如性别字段选择性≈0.5(男女各半),建索引效率极低;而手机号字段选择性≈1,属于黄金索引列。
判断标准:
- 选择性>0.3:强烈推荐建索引
- 选择性<0.1:慎重考虑
五、前缀索引:搞定超长字段的查询
TEXT、VARCHAR(500)这类字段直接建索引会巨占空间。用前缀索引节省资源:
ALTER TABLE article ADD INDEX idx_title( title(20) )
关键点:
- 长度选择:截取长度应保证选择性>0.7
- 弊端:无法用于
ORDER BY和覆盖索引
六、索引监控:用工具发现无效索引
通过SHOW INDEX FROM table看Cardinality(基数),如果远小于行数说明索引质量差。更推荐用性能分析工具:
-- 查看未使用索引
SELECT * FROM sys.schema_unused_indexes
-- 分析索引使用情况
EXPLAIN SELECT * FROM users WHERE status=1
定期清理无效索引,减少写操作负担。

搞定索引优化,面试直接加10分!如果需要开通面试鸭会员刷真题,通过 面试鸭返利网 找我下单可返利25元,性价比拉满。覆盖索引、联合索引、索引选择性问题随便问,你都能答得漂漂亮亮!
更多数据库调优技巧见首页:面试鸭返利网


