用途
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