Communitygithub.com

关系型数据库(引擎无关)技能

引擎中立(MySQL/MariaDB/MSSQL 通用)的关系型数据库 AI 智能体技能。提供跨数据库引擎的最佳实践、模式设计、索引、查询优化和迁移指南。

关系型数据库(引擎无关)技能 是什么?

这是一个引擎无关的关系型数据库AI智能体技能,适用于MySQL/MariaDB和MSSQL。它提供跨数据库引擎的统一最佳实践,涵盖模式设计、索引策略、查询优化、事务与锁定管理以及安全迁移。技能文档内嵌了SQL方言差异提示(例如MSSQL与MySQL/MariaDB的不同),并附带方言速查表。其核心原则是:优先基于测量证据(执行计划、性能指标)做出决策,提出最小且可验证的更改,并始终考虑生产安全(包含回滚计划)。该技能适用于设计或审查数据库模式、诊断慢查询、选择隔离级别、实现高效分页以及规划生产级迁移。不适合深挖存储引擎内部机制或仅适用于某厂商的特性。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add hicucu/rdb-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

关系型数据库(引擎无关)

概述

引擎无关的关系型数据库最佳实践。原则与模式一次性编写;仅在 SQL 方言差异(MSSQL vs MySQL/MariaDB)之处内联标记或收集在方言速查表中。以正确性和基于测量证据的最小变更作为优化目标。

使用时机

  • 设计或审查模式(表、键、规范化、数据类型)。
  • 添加或修复索引;诊断慢查询或全表扫描。
  • 读取执行计划以找出瓶颈。
  • 选择或排查事务隔离、锁定或死锁。
  • 对大型结果集进行分页;消除 N+1 访问。
  • 规划生产安全的模式迁移。

不适用于: 引擎内部深入探讨(如 InnoDB 缓冲池等存储引擎内部机制、仅限某厂商的特性、仅限 T-SQL 的构造、复制/分片拓扑)。请使用该引擎自身的文档或专用的单引擎技能。

工作流程

  1. 首先建立上下文。 哪个引擎 + 哪个主要版本?读写比例、行数、延迟目标、OLTP 还是分析型。建议会因这些因素而变化。
  2. 仅阅读以下每个章节中链接的相关参考文档。
  3. 提出能解决问题的最小变更,并说明其权衡。
  4. 用证据验证——捕获变更前后的执行计划以及行数/时间指标(参见 references/execution-plans.md),而不是仅凭经验法则。
  5. 对于生产环境,需包含回滚计划及部署后的验证。

模式设计

  • 显式建模关系;从规范化(3NF/BCNF)开始,只有在有测量依据的情况下才进行反规范化。每个表都需要一个稳定的主键。
  • 选择最窄的正确数据类型;在模式层面(NOT NULL、UNIQUE、CHECK、FK)约束无效状态,而不是仅在应用代码中处理。

参考: 规范化 · 键与约束 · 数据类型

索引

  • 对 WHERE、JOIN 和 ORDER BY 中使用的列建立索引——依据选择性,而非猜测。复合索引顺序:等值列在前,范围/排序列在后(最左前缀规则)。范围谓词会阻止后续列使用索引。
  • 覆盖索引可避免表查找。审计并删除未使用或重复的索引;每个索引都会增加写操作的成本。

参考: 索引 · 复合索引

查询优化

  • 保持谓词 SARGable——不要在 WHERE 中对索引列使用函数/隐式类型转换。仅选择需要的列。优先使用 EXISTS 而非 IN (子查询),当不需要去重时使用 UNION ALL 而非 UNION,并对大型写操作进行批量处理。
  • 使用键集(游标)分页替代大型 OFFSET。通过批处理或连接消除 N+1 问题。

参考: 查询优化 · 执行计划 · 分页

事务与锁定

  • 保持事务简短;在事务外执行 I/O 和慢速工作。以一致顺序访问行以避免死锁;预期可能发生死锁并采用退避重试。
  • 了解您的引擎的默认隔离级别(各引擎不同)以及每个级别允许的异常。有目的地使用锁定读(FOR UPDATE),而不是出于习惯。

参考: 事务与隔离 · 锁定与死锁

迁移与 DDL

  • 进行模式变更时应遵循“先扩展 → 回填 → 收缩”的渐进式且向后兼容的方式。大型/锁表型 DDL 需要在线策略和回滚路径。

参考: 迁移与 DDL

引擎方言差异

自增列、标识符引用、分页、Upsert、字符串函数、当前时间、EXPLAIN 和默认隔离级别在不同引擎间均有差异。在编写可移植 SQL 之前,请确认目标引擎的语法。

参考: 引擎方言速查表

安全护栏

  • 优先使用测量证据(执行计划、指标)而非泛泛规则。
  • 当行为依赖于特定引擎时,请明确说明引擎和主要版本。
  • 在进行破坏性操作(DROP/DELETE/TRUNCATE 或任何不可逆迁移)前,必须获得明确的人类审批。始终确保已确认存在备份。

相关技能