Agent Skills
返回列表
慢SQL急诊室·贴上EXPLAIN就开方

慢SQL急诊室·贴上EXPLAIN就开方

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_8ee65e73/sql-slowquery-doctor。

技能介绍

先看清你要解决的问题

一条接口从 200ms 变成 3s,SHOW PROCESSLIST 里那条 SQL 的 Time 越爬越高,slow_query_log 刷到几十 MB。翻 EXPLAIN,可能只看到 type: ALL 和一串 NULL,rows 是 800 万,Extra 里挂着 Using filesort 和 Using temporary。

慢查询真正让人头疼的地方不在"慢",而在原因分散在三层:执行计划里的扫描方式、索引设计与 SQL 写法之间的错配、以及锁等待和长事务引发的偶发抖动。排查时容易只改一处:看到 filesort 就加索引,结果写放大没算清;看到 OR 就拆查询,结果还是全表扫描。

它怎么工作

这个技能按"先诊断、再开方"的方式组织,输出固定分四个章节:

  • 病灶定位:逐列解读 type、key、rows、Extra,直接引用 EXPLAIN 原文指出哪一步最贵。常见异常如全表扫描、临时表落盘、rows 估计爆炸、filesort 触发,会按"预期收益 × 实施成本"排序。
  • 处方:每条方案都带可直接执行的语句。索引用 idx_表名_列名 规范命名,同时说明命中哪个查询条件、是否覆盖索引、对写入的影响;改写后的 SQL 覆盖 SELECT *、隐式类型转换、函数包列、深分页(改游标或延迟关联)和大 IN(改临时表或分批)。
  • 预期收益与代价:给出改造后执行计划应有的特征,并指导你写对比验证 SQL,拿前后 rows 和实际耗时说话,不拍脑袋保证提速倍数。
  • 上线风险清单:每条方案附回滚语句、在线加索引方式(如 ALGORITHM=INPLACE、gh-ost、pt-osc)与验证 SQL。

锁与事务相关的问题也被覆盖:从"偶发变慢"中识别锁等待、长事务、间隙锁场景,给出定位命令和对应的解法。你也可以直接贴一段慢日志,技能会按"出现频次 × 单次耗时"排出需要优先救治的 Top 5。

适用边界与注意点

  • 支持 MySQL、PostgreSQL、SQL Server 等关系型数据库,但版本差异显著时(例如 MySQL 5.7 与 8.0)会先确认版本再开方。
  • 只做诊断与建议,不会连接你的数据库,也不直接执行任何语句。
  • 所有 DDL 都建议先在测试环境验证;大表加索引请使用在线 DDL 方案。
  • 数据量未知时,方案会分别标注"百万级以下"和"千万级以上"两档建议。
  • 如果贴出来的 SQL 中带有手机号、身份证等敏感字面量,请先脱敏再讨论。
  • 拿不准的结论会明确标注"需要 EXPLAIN ANALYZE 实测确认"。

使用场景

  • 手上有一条 EXPLAIN 显示 type 为 ALL、rows 上百万的慢 SQL,需要快速定位慢在哪一步并给出索引方案。
  • 深分页 LIMIT 100000,20 的接口越来越慢,想改写成游标或延迟关联并验证前后耗时。
  • 慢日志堆积了上千条记录,想按出现频次乘以单次耗时排出最需要优先救治的 Top5 查询。
  • 线上偶发性变慢,怀疑锁等待或长事务,需要给出定位命令和对应的解法。

适合人员

  • 负责业务接口的后端开发,遇到 SQL 变慢时想知道执行计划里具体哪一步最贵,而不是只被告知加个索引。
  • 刚接手数据库运维的 DBA 新手,想系统学习如何读 EXPLAIN,并写出附带回滚语句、可安全上线的索引 DDL。
  • 独立负责整条后端链路的小团队开发者,需要每个方案都给出预期收益、写放大代价和上线风险清单。
  • 面对大表加索引不敢动手的工程师,想确认在线 DDL 方式和千万级以上数据量场景下的建议。