14 慢 SQL 怎么定位和优化?
2026/9/14...大约 2 分钟
14|慢 SQL 怎么定位和优化?
开场定位手段先讲全——慢 SQL 是线上性能问题的头号来源,几乎每个性能专项的最后一步都落在数据库。
回答思路
第一步:定位手段先讲全
- 慢查询日志(long_query_time 阈值抓慢 SQL)
- 数据库监控面板(QPS 异常、扫描行数飙升)
- druid 或 p6spy 这类连接层监控
- trace 系统里按耗时排序的数据库 span
多个入口互相印证。
第二步:拿到慢 SQL 后的分析动作
先 explain 看执行计划,重点看:
| 字段 | 看什么 |
|---|---|
| type | all 全表扫描就是红灯 |
| key | 走了哪个索引 |
| rows | 扫描行数 |
| extra | using filesort、using temporary 都是坏味道 |
explain 的字段会读,这题就及格了。
第三步:优化手段分层给(从便宜到贵)
- 索引层:给过滤和排序字段加联合索引,注意最左前缀和区分度
- SQL 层:改写——避免函数包字段、大分页改游标、select 少查字段
- 架构层:读写分离、缓存挡读、批量改异步、分库分表
先索引后架构的顺序是成本意识。
第四步:讲验证
优化后重新 explain 对比执行计划、压测对比 RT 和 TPS、上线后观察慢查询日志清零——闭环完整才算解决。
收尾:补两个坑
- 索引不是越多越好(写入变慢、优化器选择困难)
- 隐式类型转换会让索引失效(字符串字段用数字查)
这种坑点脱口而出,说明真调过。
考察重点
| 维度 | 说明 |
|---|---|
| 企业动机 | 测开和性能岗都拿这题考硬技术——会不会 explain 是硬分水岭 |
| 过线标准 | explain 会读关键字段 + 优化手段分层 |
| 区分度 | 讲最左前缀、隐式转换失效、索引代价的是实战派;只会「加索引」三个字的是没真调过 |
| 加分项 | 大分页游标改写、读写分离这些架构层手段 |
| 减分项 | 不知道 explain,纯靠感觉猜,硬技术不过关 |
来源
整理自知识星球帖《面试情报 04|性能测试 20 题》,返回题库。