SQL Query Reviewer

审查 SQL 查询的正确性、安全性和性能,提供结构化报告与优化建议。

已扫描
适合谁
数据库开发者、数据工程师
不适合谁
无 SQL 经验的初学者、非技术背景的业务人员
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @lnguyen1996/sql-query-reviewer

Skill 说明

命令、参数、文件名以原文为准

sql-query-reviewer

描述

审查任意方言的 SQL 查询在正确性、性能和安全性方面的表现。可识别 N+1 问题、缺失索引、注入风险、笛卡尔积连接以及隐式类型转换等问题。返回结构化报告,包含严重程度评级和优化后的重写建议。

使用场景

  • “优化这个查询”
  • “这段 SQL 安全吗”
  • “为什么我的查询很慢”
  • “检查一下我的 SQL”
  • “这段代码是否防注入”
  • 任何原始 SQL 查询、ORM 生成的 SQL 或迁移文件

支持的方言

PostgreSQL、MySQL、SQLite、SQL Server(T-SQL)、Oracle、BigQuery、Snowflake — 以及任何 ANSI SQL 标准兼容的方言。

输入

粘贴 SQL 查询或多个查询。可选指定:

  • 查询方言(默认为通用 ANSI SQL)
  • 表的大致大小(有助于索引建议)
  • 是否位于高频路径中(例如每请求都调用)
  • 使用的 ORM 框架(如适用)

输出格式

## SQL 查询审查

### 严重(发布前必须修复)
- [发现项] — [导致错误或数据丢失的原因]
  ✗ 修改前:[存在问题的 SQL]
  ✓ 修改后:[修正后的 SQL]

### 性能(建议修复)
- [发现项] — [预计影响]
  ✗ 修改前:[低效的 SQL]
  ✓ 修改后:[优化后的 SQL]

### 建议(可选改进)
- [发现项] — [说明]

### 正确之处
- [已正确实现的具体模式]

### 总结
[2–3 句话:最大风险、首要修复项,如有索引建议也一并列出]

审查清单

正确性

  • 使用 = 比较 NULL 值,而非 IS NULL
  • 子查询可能返回 NULL 时使用 NOT IN — 结果恒为假
  • 在允许重复的情况下使用 UNION 而非 UNION ALL — 造成不必要的去重操作
  • 错误的连接类型:应使用 LEFT JOIN 却用了 INNER JOIN,或反之
  • 笛卡尔积连接(缺少 ON 子句或无意图的交叉连接)
  • 聚合函数未配合 GROUP BY 使用,且包含非聚合列
  • 错误使用 HAVINGWHERE 子句
  • 日期/时间运算在错误时区进行

安全性

  • 字符串拼接插入查询 — 存在 SQL 注入风险
  • 用户输入用于 ORDER BYLIMIT、表名或列名 — 可能被操纵
  • 动态 SQL 中缺少参数化处理
  • 过于宽泛的 SELECT * — 可能暴露敏感字段
  • 缺少行级安全过滤

性能

  • 仅需部分列却使用 SELECT * — 导致多余的数据传输
  • 大表扫描时缺少 WHERE 条件
  • 使用 LIKE '%value%' — 无法利用索引(前导通配符)
  • 在索引列上应用函数作为 WHERE 条件 — 破坏索引有效性
  • N+1 问题:循环内执行查询,本可通过单次 JOIN 解决
  • 外键或频繁筛选列缺少索引
  • 子查询按行重复执行 — 应改用 CTE 或 JOIN
  • 使用 ORDER BY RAND() 或类似操作 — 引发全表扫描
  • 无限制的结果集返回 — 未设置 LIMIT

风格

  • 关键字或标识符大小写不一致
  • 列引用模糊,未使用表别名
  • 查询过长且未使用 CTE 分解为可读步骤
  • 使用“魔法数字”而无注释说明其含义

严重程度定义

  • 严重:存在正确性缺陷(结果错误)、注入风险或数据丢失 — 必须在生产环境前修复
  • 性能:导致查询缓慢、全表扫描或扩展性差 — 建议在发布前修复
  • 建议:提升可读性、可维护性或防御性编程的改进项

自我优化指令

每次审查后,请记录最常见的发现。完成 20 次审查后,在响应顶部显示“最常见 SQL 问题”——列出最近出现频率最高的前 3 个 SQL 反模式。

L
@lnguyen1996

已收录 2 个 Skill

相关推荐