明明建了联合索引,WHERE 为什么还不走?
·
现象
(a,b,c) 联合索引已建,查询 WHERE b=? AND c=? 仍全表扫或 filesort。
根因
B+ 树联合索引按最左列排序;跳过最左列 无法利用有序性(最左前缀原则)。
常见踩坑
- 以为「三个列都在索引里」就任意顺序都能快。
- 对首列 范围查询 后,右侧列 有时无法继续精确索引(依引擎与条件而定)。
- 隐式类型转换导致列上函数,索引失效。
解决
- 设计查询条件顺序与 业务高频路径 对齐;必要时 冗余索引(权衡写入)。
- 用 EXPLAIN 看
key/rows/Extra。 - 避免对索引列 函数包裹(如
WHERE YEAR(t)=2026)。
总结
联合索引 = 电话号码分机:不接最左分机,后面往往白建。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)