SuperAPI AI 工具集

sql-pro

数据与分析

查看项目

更新于 10-15 08:47

技能介绍

用途

SQL Pro 提供跨主流数据库平台(PostgreSQL、MySQL、SQL Server、Oracle)的专家级 SQL 开发能力,专注于复杂查询设计、性能优化和数据库架构。它掌握 ANSI SQL 标准、平台特定优化以及现代数据模式,强调效率与可扩展性。

何时使用

  • 编写包含连接、CTE、窗口函数或递归查询的复杂 SQL 查询
  • 为新应用设计数据库模式,或重构现有模式
  • 通过执行计划分析优化慢 SQL 查询
  • 在不同数据库平台之间迁移数据(如 MySQL → PostgreSQL)
  • 实现存储过程、函数或触发器
  • 使用高级聚合和窗口函数构建分析报表
  • 将业务需求转化为 SQL 查询逻辑
  • 处理跨平台 SQL 兼容性问题(不同方言)

何时不使用

  • 需要 PostgreSQL 特定功能 → 使用 postgres-pro
  • MySQL 特定管理 → 使用 database-administrator
  • 简单 CRUD 操作 → 使用 backend-developer
  • ORM 查询模式 → 使用相应语言技能

决策框架

CTE vs 子查询 vs JOIN 决策树

  • 需要多次引用结果?→ 使用 CTE(避免重复子查询求值)
  • 递归数据遍历(层级、图)?→ 使用递归 CTE(递归的唯一选择)
  • 简单查找或过滤?→ 使用 JOIN(查询规划器最易优化)
  • WHERE 子句中的相关子查询?
    • 检查存在性 → 使用 EXISTS(首次匹配即停止)
    • 值比较 → 改用 JOIN
  • 可读性与性能权衡?
    • 复杂逻辑、可读性关键 → CTE(更易理解、调试、维护)
    • 性能关键、逻辑简单 → 子查询或 JOIN(查询规划器可内联优化)

窗口函数 vs GROUP BY 决策矩阵

  • 需要聚合 + 行级明细 → 窗口函数
  • 仅需聚合结果 → GROUP BY
  • 排名/行编号 → 窗口函数(ROW_NUMBER、RANK、DENSE_RANK)
  • 累计总计/移动平均 → 带帧的窗口函数
  • LAG/LEAD(访问前/后行)→ 窗口函数
  • 百分位/NTILE → 窗口函数
  • 按组简单计数/求和/平均 → GROUP BY(更高效)

红旗信号 → 升级处理

  • 执行计划中出现笛卡尔积:意外交叉连接导致行数指数增长
  • 复杂多级递归 CTE 性能问题:需要高级优化
  • 跨平台迁移且功能不兼容:需要平台特定功能映射
  • 查询包含 10+ 连接和复杂逻辑:架构异味,可能需要重新设计
  • 复杂时间序列逻辑的时态查询:高级分析模式

核心能力

高级查询模式

  • 公共表表达式(CTE)和递归查询
  • 窗口函数:ROW_NUMBER、RANK、LEAD、LAG、聚合窗口
  • PIVOT/UNPIVOT 数据转换操作
  • 树/图结构的层级查询
  • 基于时间的时态查询分析

查询优化

  • 执行计划分析与解读
  • 索引选择策略与覆盖索引
  • 统计信息管理与维护
  • 查询提示与计划指南(必要时)
  • 并行查询执行调优

索引设计模式

  • 聚集索引与非聚集索引
  • 用于查询优化的覆盖索引
  • 用于选择性查询的过滤/部分索引
  • 基于函数/表达式的索引
  • 复合索引列顺序

质量检查清单

查询性能

  • 执行时间满足要求(OLTP:<100ms,分析:<5s)
  • 所有复杂查询均审查 EXPLAIN ANALYZE
  • 大表上无顺序扫描(除非有意为之)
  • 索引有效利用(检查执行计划)
  • 无 N+1 查询模式(消除相关子查询)

SQL 质量

  • SELECT 中仅包含必要列(无 SELECT *)
  • 多表查询使用显式表别名
  • 正确处理 NULL(COALESCE、IS NULL vs = NULL)
  • 比较中数据类型匹配(无隐式转换)
  • 使用参数化查询(防止 SQL 注入)

优化

  • 适用时使用窗口函数替代自连接
  • 使用 EXISTS 替代 NOT IN 以获得更好的 NULL 处理
  • 为频繁查询建议覆盖索引
  • 重写查询以消除相关子查询

文档

  • 复杂查询逻辑在注释中说明
  • CTE 名称具有描述性且自文档化
  • 记录预期输出格式
  • 记录性能特征

附加资源

  • 详细技术参考:见 REFERENCE.md
  • 代码示例与模式:见 EXAMPLES.md