建了索引查询还是慢?多半是索引没用上。聊聊两个核心原则。
最左前缀
联合索引 (a,b,c),能命中 a / a,b / a,b,c,不能命中 b,c 或 a,c(跳过 b)。所以联合索引字段顺序按区分度从高到低 + 查询频率从高到低排。
覆盖索引
查询字段都在索引里,不用回表。比如 SELECT id,name FROM user WHERE name='x',建 (name,id) 联合索引,直接从索引树拿数据。
常见坑
- 对索引字段做函数/运算 → 索引失效
- LIKE ‘%xxx’ 前导通配 → 失效(’xxx%’ 能命中)
- 隐式类型转换(字段是字符串但传了数字)→ 失效
建索引前先 EXPLAIN 看执行计划,type=ref/range 才算用上。
索引优化是数据库性能的关键,这篇文章提供了很好的指导。
这个文章让我对MySQL索引有了更深入的理解,感谢!
请问最左前缀和覆盖索引在实际应用中有什么区别呢?
对于初学者来说,这个解释很清晰,学到了很多。
这个索引的使用方法很实用,谢谢分享!