360 Secure SkillHub
360 安全技能中心

sql-review

以规则清单形式审查用户提供的 SQL 语句,按严重、性能、优化三级列出 SELECT *、缺少 WHERE、隐式类型转换、前导通配符、N+1 查询、缺少索引、排序与分页等问题,并给出优化后 SQL 与建议索引,附带固定格式的审查报告模板。

guyulong
热度 待计算
最近更新 2026-10-18 23:40:11
分类:开发依赖:纯提示词应用场景:代码审查

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add guyulong/cn-agent-skills/sql-review
Metadata
name
sql-review
description
SQL审查与优化建议
category
数据库
tags
["SQL","数据库","优化","审查"]
tools
["claude-code","cursor","copilot"]

SQL审查与优化

使用场景

审查SQL语句,发现性能问题并提供优化建议。

审查规则

🔴 严重问题

  1. **SELECT ***

    • 问题:查询所有字段,浪费资源
    • 修复:只查询需要的字段
  2. 缺少WHERE条件

    • 问题:全表扫描
    • 修复:添加必要的过滤条件
  3. 隐式类型转换

    • 问题:字段类型不匹配导致索引失效
    • 示例:WHERE phone = 13800138000(phone是varchar)
    • 修复:WHERE phone = '13800138000'
  4. 前导通配符

    • 问题:LIKE '%keyword' 无法使用索引
    • 修复:考虑全文索引

🟡 性能问题

  1. N+1查询

    • 问题:循环中执行查询
    • 修复:使用JOIN或批量查询
  2. 子查询效率低

    • 问题:相关子查询
    • 修复:改用JOIN
  3. 缺少索引

    • 问题:WHERE/JOIN字段未建索引
    • 修复:添加合适索引
  4. 排序未使用索引

    • 问题:ORDER BY字段无索引
    • 修复:添加联合索引

🟢 优化建议

  1. 分页优化

    -- 慢:OFFSET大时性能差
    SELECT * FROM orders LIMIT 10 OFFSET 10000;
    
    -- 快:使用游标分页
    SELECT * FROM orders WHERE id > 10000 LIMIT 10;
    
  2. 批量操作

    -- 慢
    INSERT INTO users (name) VALUES ('张三');
    INSERT INTO users (name) VALUES ('李四');
    
    -- 快
    INSERT INTO users (name) VALUES ('张三'), ('李四');
    
  3. EXPLAIN分析

    EXPLAIN SELECT * FROM users WHERE phone = '13800138000';
    -- 查看 type、key、rows 字段
    

输出格式

SQL审查报告
━━━━━━━━━━━━━━━━━━━━━━━━
原始SQL: SELECT * FROM users WHERE phone = 13800138000

问题:
🔴 [严重] SELECT * - 建议只查询需要的字段
🔴 [严重] 隐式类型转换 - phone字段应使用字符串
🟡 [建议] phone字段建议添加索引

优化后:
SELECT id, name, phone FROM users WHERE phone = '13800138000';

建议索引:
CREATE INDEX idx_phone ON users(phone);