MySQL索引优化实战:从3秒到300毫秒的蜕变

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

上周排查用户投诉时发现后台报表查询要3秒多,explain一看全表扫描直接裂开。分享下这次优化的骚操作:

1. 联合索引最左匹配原则踩坑 给status,create_time字段加了联合索引,但查询条件写成WHERE create_time>? AND status=1居然不走索引!调换字段顺序立竿见影,这波血赚。

2. 用覆盖索引避免回表 列表页只需要展示id和title,专门建了(id,title)的覆盖索引,Extra列出现Using index时真的爽到飞起。

3. 时间范围查询的索引失效 发现带TO_DAYS()函数的日期比较会导致索引失效,改成BETWEEN ? AND ?后查询计划马上变漂亮。这里埋个坑:有时间再写写datetime和timestamp的索引差异。

现在报表查询稳定在200-300ms,顺便把相似的订单查询也优化了。搞DB优化真的像玩解谜游戏,每个执行计划都是线索,改完立即看explain验证的感觉比抽卡还刺激...

评论24
回复 · 24
IvySky
IvySky 初级 · #20 ·
学到了,顶一下
Drew
Drew 新手虹翼巡游 · #19 ·
感谢分享!
RiverStone
RiverStone 初级心屿荧途 · #18 ·
感谢分享!
杨涛
杨涛 新手 · #17 ·
学到了,顶一下
安然
安然 新手时梦乐园 · #16 ·
同求,期待更新
未央
未央 新手漫步繁花 · #15 ·
感谢分享!
FinnSnow
FinnSnow 初级 · #14 ·
同求,期待更新
Theo
Theo 新手 · #13 ·
已解决,谢谢楼主
KnoxStar
KnoxStar 新手流金绮梦 · #12 ·
感谢分享!
赵娟静
赵娟静 新手璃梦花海 · #11 ·
支持了~
徐超悦
徐超悦 初级清瑶问鼎 · #10 ·
感谢分享!
MayaPark
MayaPark 初级 · #9 ·
支持了~
Ben
Ben 新手 · #8 ·
感谢分享!
WadeYang
WadeYang 新手漫步繁花 · #7 ·
学到了,顶一下
刘磊
刘磊 新手 · #6 ·
支持了~
徐静
徐静 新手 · #5 ·
学到了,顶一下
Iris
Iris 新手 · #4 ·
已解决,谢谢楼主
Zane
Zane 初级 · #3 ·
学到了,顶一下
FinnLeaf
FinnLeaf 新手星灿心语 · #2 ·
学到了,顶一下
发光的少年
发光的少年 初级 · #1 ·
感谢分享!
1 2
微信客服 微信客服