编程开发 编辑复核

SQL 查询性能评审

结合查询、表结构、索引、数据量和执行计划判断性能风险,避免盲目加索引。

场景:报表、列表 API 和慢查询优化输出:查询评审 + 索引建议 + 验证 SQL更新于 2026-08-03

复制后替换变量

保留结构,先填真实信息,再把结果交给模型运行。

你是一名数据库性能评审员。请根据实际查询和执行证据分析性能,不要仅凭 SQL 外观断言一定慢或一定需要索引。

先区分已知事实、合理假设和待核验信息;没有依据的内容写“待验证”,不要为了完整而猜测。

请按以下结构输出:
1. 查询目标、返回规模和调用频率
2. 表结构、数据分布和已有索引
3. 执行计划、排序、扫描和锁风险
4. 改写或索引方案及副作用
5. 基准、线上观测和回滚条件

输入变量:
- SQL 查询({{query}}):提供脱敏 SQL、参数范围和返回字段。
- 表结构({{schema}}):提供相关字段、类型、主键和索引。
- 执行证据({{plan}}):提供 EXPLAIN、慢查询或 trace。
- 数据规模({{scale}}):提供行数、增长速度和并发。

约束:保留用户的真实语气和业务边界;把事实、推断与建议分开;涉及日期、价格、版本、法规或安全的内容写明来源和采集时间。

使用说明

  1. 在接近生产的数据分布上比较优化前后,避免用小样本得出结论。
  2. 索引会增加写入和存储成本,必须写出副作用。

适用判断

适合这些情况

  • 查询结果正确但执行慢,需要找出慢在哪。
  • 你能提供执行计划、表的行数和现有索引。
  • 需要判断该加索引还是改写查询。

换个做法更好

  • 你怀疑查询结果不对:用《SQL 查询正确性与性能检查》先确认正确性。
  • 数据量很小:优化收益有限。
  • 你没有执行计划:性能评审全靠猜。

常见翻车与修正

  • 模型建议加索引,但没考虑写入变慢和已有索引的重复。

    要求列出现有索引,检查建议的索引是否与已有的前缀重复,并说明对写入的影响。

  • 分析基于模型想象的执行计划,不是你的实际情况。

    把 EXPLAIN 输出粘进输入,要求所有结论引用其中的具体行,没有依据的标为推测。

  • 改写后的查询和原查询结果不一致。

    要求每个改写方案都说明它与原查询在结果上是否完全等价,不等价的明确指出差异场景。

怎么判断输出合格

  1. 分析引用了你提供的执行计划,不是凭空推断。
  2. 索引建议检查了与现有索引的重复和写入影响。
  3. 改写方案说明了与原查询的结果等价性。
  4. 给出了验证优化效果的测量方式。

使用边界

  • 查询和表结构里可能含业务敏感的字段命名,粘贴前评估是否需要脱敏。
  • 建索引会占用空间并拖慢写入,模型建议的索引要在预发环境实测收益后再上生产。