慢查询复盘别只贴 EXPLAIN:索引、数据分布和业务一起看

3次阅读
没有评论

慢查询优化不能只看一句 SQL。真正有效的复盘要把业务场景、数据分布、执行计划、索引设计和上线验证放在一起,否则很容易出现“加了索引,当时快了,过几天又慢”的循环。

先描述业务场景

复盘第一段先写清这条查询服务哪个页面、接口或任务,触发频率是多少,用户是否直接感知。后台定时报表和首页核心查询的优化优先级完全不同,不能只按耗时排序。

还要写清查询条件来自哪里:用户筛选、系统默认、权限范围,还是历史兼容字段。业务语义决定了哪些条件必须保留,哪些可以通过产品规则调整。

再记录数据分布

慢查询往往和数据分布有关。总行数、过滤字段基数、冷热数据比例、时间范围跨度、是否存在倾斜值,都应该记录。只看表有多少行不够,关键是 WHERE 条件能过滤掉多少。

如果某个状态占比特别高,单列索引可能效果很差;如果时间范围总是很大,就要考虑归档、分区或改查询入口。

EXPLAIN 要结合索引解释

执行计划里重点看 type、key、rows、filtered、Extra。不要机械追求 type=refUsing index,要结合返回行数和排序方式判断。Using filesort 不一定坏,坏的是在大结果集上排序又无法限制范围。

索引设计要贴合查询:等值字段、范围字段、排序字段的顺序要说明理由。新增联合索引前,也要检查是否和现有索引重复。

优化后要做回归观察

优化完成后记录改动、执行计划变化、耗时变化和业务验证结果。上线后继续观察慢查询日志、连接池、CPU、IO 和主从延迟。

一份慢查询复盘模板的价值,是把“这条 SQL 慢”变成“这个业务场景为什么慢、我们为什么这样改、改完是否真的稳定”。这才方便以后继续维护。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-06发表,共计683字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)