mcpField
D
data-sql

data-sql

github.com/alexanderstephenthompson数据与数据库36 次安装
代码仓库

关于 data-sql

面向开发者和数据从业者的 SQL 编写与设计技能,涵盖 PostgreSQL、Redshift、Athena 和 Spark SQL。它将查询组织、模式设计与索引感知的性能指导结合起来。

主要功能

  1. 01使用 CTE 组织查询
  2. 02尽早过滤并显式列名
  3. 03索引感知的查询模式
  4. 04模式设计与规范化
  5. 05窗口函数与数据建模
  6. 06幂等 upsert 指导

适用场景

  1. 01优化生产环境 SQL 查询
  2. 02设计模式与数据模型
  3. 03用 CTE 整理复杂查询

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alexanderstephenthompson/claude-hub --skill data-sql

安装后在 Claude Code 中输入/data-sql确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
query-patterns.md
references/
window-functions.md
query-optimization.md

详细介绍

Data SQL Skill

版本: 1.0 技术栈: SQL(PostgreSQL、Redshift、Athena、Spark SQL)

SQL 是唯一一种可运行的查询可能比等效的可运行查询慢 1,000 倍的语言。缺少索引会让一次 50ms 的查找变成耗时 50 秒的全表扫描。添加列时,SELECT * 会导致下游代码出错。相关子查询会悄无声息地执行 N+1 模式,这种问题在开发环境中不明显,却会拖垮生产环境。查询规划器不会警告你——它只会照你要求的执行。

编写 SQL 时考虑索引、明确指定列并使用 CTE,不仅能加快执行速度,也更容易调试。清晰度与性能相辅相成。


范围与边界

此技能涵盖:

  • 查询优化模式
  • 架构设计与规范化
  • 数据建模(星型模式、缓慢变化维度)
  • CTE 与查询组织
  • 索引策略
  • 窗口函数

交由其他技能处理:

  • security:防止 SQL 注入、参数化查询
  • data-pipelines:何时使用 SQL,何时使用应用程序代码

使用此技能的场景: 编写 SQL 查询或设计架构。


核心原则

  1. 使用 CTE 提高可读性 — 将复杂查询拆分为命名步骤。
  2. 尽早筛选 — 尽可能将 WHERE 子句放在靠近数据源的位置。
  3. 明确指定列 — 生产代码中绝不使用 SELECT *。
  4. 编写索引感知型查询 — 了解哪些列已建立索引,并编写能利用这些索引的查询。
  5. 幂等操作 — INSERT/UPDATE 应支持安全重试。

模式

CTE 组织
-- Good - logical steps, easy to debug
WITH active_users AS (
    SELECT user_id, email
    FROM users
    WHERE status = 'active'
),
recent_orders AS (
    SELECT user_id, COUNT(*) as order_count
    FROM orders
    WHERE created_at > CURRENT_DATE - INTERVAL '30 days'
    GROUP BY user_id
)
SELECT
    u.email,
    COALESCE(o.order_count, 0) as recent_orders
FROM active_users u
LEFT JOIN recent_orders o USING (user_id);
Upsert 模式(PostgreSQL)
INSERT INTO inventory (sku, quantity, updated_at)
VALUES ('ABC123', 100, NOW())
ON CONFLICT (sku) DO UPDATE SET
    quantity = EXCLUDED.quantity,
    updated_at = EXCLUDED.updated_at;
窗口函数
-- Running total and row number
SELECT
    date,
    revenue,
    SUM(revenue) OVER (ORDER BY date) as running_total,
    ROW_NUMBER() OVER (PARTITION BY category ORDER BY revenue DESC) as rank
FROM daily_sales;

反模式

反模式问题修复方法
SELECT *架构变更时会出错,并浪费带宽明确列出各列
相关子查询N+1 查询行为使用 JOIN 或窗口函数
JOIN 条件中使用 OR阻碍索引使用调整结构或使用 UNION
对索引列使用函数WHERE YEAR(date) = 2024使用范围:date >= '2024-01-01'
缺少 GROUP BY 列行为未定义包含所有非聚合列

检查清单

  • 生产查询中不使用 SELECT *
  • 复杂查询使用 CTE
  • WHERE 子句尽早筛选
  • JOIN 优先使用已建立索引的列
  • Upsert 操作具有幂等性
  • 使用 EXPLAIN 测试大型查询

参考资料

  • references/query-optimization.md — 索引使用、JOIN 优化、性能
  • references/window-functions.md — 窗口函数模式与示例

资源

  • assets/query-patterns.md — 常见 SQL 模式与模板

评论

支持 Markdown