本章你将彻底搞懂:MySQL 索引为什么会失效?10 种最经典的索引失效场景,包括函数操作、隐式类型转换、OR 条件、LIKE 以 % 开头、范围查询右侧失效、联合索引非最左匹配、不等于/IS NULL、排序与分组不匹配、字符集不一致等。每个场景都配有完整可运行的 SQL 代码、EXPLAIN 输出对比、真实踩坑经历、修复步骤。
配套资源:10 个场景的验证 SQL 脚本(可直接复制执行)、索引失效自检清单(打印版)、联合索引字段顺序决策树。
真实踩坑:我曾把mobile字段定义为varchar但查询时用INT传入,导致全表扫描,3 秒的查询拖垮了整个用户中心;还有一次WHERE status IN ('paid','shipped')因为数据分布不均,MySQL 优化器放弃了索引,我花了 4 小时才找到原因;更坑的是,一个用了ORDER BY created_at DESC的查询,因为索引顺序是(status, created_at)且status过滤条件不是常量,触发了Using filesort,CPU 直接爆了。
2.1 一个“索引在眼前,却用不上”的凌晨故障
2020 年我在一家金融公司做 DBA。某天凌晨 2 点,收到告警:核心订单
订阅专栏 解锁全文

1411

被折叠的 条评论
为什么被折叠?



