MySQL索引优化误区:为什么加了索引反而更慢了?

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 29 浏览 2 回复

昨天给核心业务表加了复合索引,结果查询性能不升反降,从800ms直接掉到1.5s。排查后发现踩了三个典型坑:1)索引字段顺序不对,把区分度低的status字段放在最前面;2)索引覆盖不全,where条件里有个字段没包含在索引中;3)最要命的是用了OR条件导致索引失效。

解决方案也挺简单:1)按区分度从高到低调整字段顺序;2)用EXPLAIN验证索引使用情况;3)把OR改写成UNION ALL。改完直接从1.5s降到200ms,这优化比删库跑路刺激多了。

顺手分享几个索引使用的冷知识:1)varchar字段建索引记得指定长度;2)频繁更新的字段慎建索引;3)有时候删掉冗余索引反而能提升性能。你们还遇到过哪些奇葩的索引翻车现场?

评论2
回复 · 2
Ben
Ben 新手 · #2 ·
学到了,顶一下
NorthWind
NorthWind 新手 · #1 ·
感谢分享!
微信客服 微信客服