SQL 查询优化器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_c1ff727a/sql-pro-v2。
技能介绍
解决的问题
慢查询定位经常卡在“该加索引、该重写、还是该调参数”之间。字段被 YEAR(created_at)、LOWER(name) 等函数包装,LIKE '%prefix' 导致前缀失效,相关子查询逐行执行,OFFSET 深分页反复跳过已读行,大事务 UPDATE / DELETE 引发锁和日志压力,都会让执行计划偏离预期。
技能如何工作
该技能面向 SELECT、INSERT、UPDATE、DELETE 和 DDL 语句,可结合数据库类型、表结构、索引列表、执行计划和性能目标进行分析。核心流程包括:
- 补齐上下文:识别 MySQL、PostgreSQL、SQL Server、Oracle、SQLite、MariaDB 等数据库下缺失的 schema、索引、
EXPLAIN和统计信息。 - 检测反模式:按过滤、Join、子查询、排序、分页、聚合、集合操作、锁和 DML 分类扫描问题,并区分 Critical、High、Medium、Low。
- 解释执行计划:分析
seq scan、filesort、Using temporary、Sort Method: external merge、Key Lookup、TABLE ACCESS FULL等信号,指出成本来源。 - 输出结构化结果:给出
Problem / Impact / Suggestion表、可执行的重写 SQL,以及 B-tree、复合索引、部分索引或表达式索引建议。
适用边界
它适合做查询诊断、改写建议和索引策略讨论,但不能替代真实数据环境下的验证。索引收益受行数、选择率、并发、缓冲池和统计信息影响;某些改写会改变返回语义、性能特征或维护成本,需要逐条评估后再上线。
使用场景
- 收到慢查询告警时,结合 `EXPLAIN` 判断是全表扫描、filesort 还是锁等待。
- 评审订单查询 SQL,识别相关子查询、深分页和函数包装列,给出重写方案。
- 为报表接口设计复合索引,覆盖过滤字段与排序字段,减少磁盘临时文件。
- 检查批量 `UPDATE` 和 `DELETE` 是否需分片,避免长事务与锁升级。
适合人员
- 负责线上接口排障的后端工程师,需要把慢 SQL 定位到具体反模式和执行计划指标。
- 写报表查询的数据工程师,需要优化过滤、排序和聚合并给出索引建议。
- 评审数据库变更的 DBA,需要判断索引收益、锁影响和改写风险。
- 接手遗留订单系统的工程师,需要排查相关子查询、深分页和大批量 DML 问题。