跳到主要内容

SQL 调优检查闸门

收藏0

按 EXPLAIN 关键指标定序排查慢 SQL,覆盖索引、写法反模式与深分页,输出改写建议与验证闭环

让 AI 安装

自由如风最新版本 0.1.0更新于 2026-11-02下载 0 次

SKILL.md

SQL 调优检查闸门#

对慢查询做定序排查并给出可执行改写。纯指令技能:不带脚本、不联网、不写任何文件,产出为分析结论与改写文本。

排查顺序(逐级收敛,不跳步)#

1 读执行计划(EXPLAIN / EXPLAIN ANALYZE)关键指标#

  • 访问类型:全表扫描还是索引扫描,命中到哪一层;
  • 预估行数与实际行数偏差大 → 统计信息过期或优化器误判;
  • Extra 中的排序、临时表、回表提示。

2 索引层#

  • WHERE、JOIN、ORDER BY 涉及的列有没有可用索引;
  • 联合索引顺序是否符合最左前缀;选择性差的列是否应放后面;
  • 是否可用覆盖索引消除回表。

3 写法层(反模式逐条对照)#

  • 对列做函数或运算导致索引失效;
  • 隐式类型转换(字符串列传数字);
  • SELECT * 拖宽回表;深分页 OFFSET;大 IN 列表;
  • 子查询被逐行执行时改写为 JOIN。

4 数据量与锁#

  • 单表行数量级;等待锁事件;批量写是否应分批。

输出格式#

  1. 定位结论:一句话指出主因,附执行计划证据;
  2. 改写方案:给出改写后的完整 SQL,逐条说明每处改动针对哪个指标;
  3. 索引方案:给出建索引语句,附预期收益与代价(写放大、空间);
  4. 验证闭环:改前与改后各跑一次 EXPLAIN 与耗时,记录两个数字——没有对比数字不宣称「已优化」。

红线#

  • 不在没有执行计划的情况下凭经验下结论;
  • 不为「可能的需求」提前建索引;
  • 改写不得改变业务语义:改动后列出语义对比,逐项确认等价。

用途与依赖

作者没写,这些是平台读文件后整理的,以文件为准。

使用示例

请求:这条订单查询现在要 8 秒,我把 EXPLAIN 结果贴给你,帮我看看哪里有问题、怎么改。

预期

先向你确认表结构与现有索引定义,然后从执行计划入手:指出访问类型是全表扫描还是索引扫描,比对预估行数与实际行数是否偏差过大(可能统计信息过期),检查 Extra 中的排序、临时表和回表提示。接着按索引层、写法层、数据量与锁的顺序逐级收敛,给出主因的一句话定位结论并附上执行计划中的证据。之后输出改写后的完整 SQL,逐条说明每处改动对应哪个指标;给出建索引语句并注明预期收益,以及写放大和空间方面的代价。最后列出语义等价对比逐项确认业务含义不变,并给出改前改后各跑一次 EXPLAIN 与耗时的验证方式——没有两个对比数字就不宣称已优化。若执行计划不完整,会先请你补齐,不会凭经验下结论。

适用场景
  • 线上某条查询突然变慢,需要定位原因并给出改写
  • 拿到一条报表 SQL 和它的 EXPLAIN 输出,想确认是否走索引
  • 深分页、大 IN、子查询等写法需要按反模式逐条核对
  • 想为慢查询设计联合索引或覆盖索引,并评估写放大与空间代价
  • 改写 SQL 后要验证是否真的变快,需要改前改后的对比方法
  • 判断慢查询是索引问题、写法问题还是数据量与锁的问题
输入
  • 慢查询的完整 SQL 语句
  • EXPLAIN 或 EXPLAIN ANALYZE 的输出
  • 涉及表的表结构与现有索引定义
  • 表的数据量级
  • 当前耗时,以及改前改后的对比数字
  • 查询的业务语义与结果要求(用于确认改写等价)
  • 是否观察到锁等待或并发写入情况
输出
  • 一句话定位结论,并附执行计划中的证据
  • 改写后的完整 SQL,并逐条说明每处改动针对哪个指标
  • 建索引语句,以及预期收益和写放大、空间代价
  • 改前改后 EXPLAIN 与耗时的验证闭环方法
  • 改动前后的业务语义等价对比清单
运行环境
未说明
依赖
无