关于 mysql
用于规划和验证安全、可衡量的 MySQL/InnoDB 变更的技能,指导数据库开发者处理模式设计、索引、查询优化、锁定和运维,并重视证据与回滚。
主要功能
- 01模式设计建议
- 02索引与分区规划
- 03查询优化实践
- 04事务与锁定建议
- 05运维发布与回滚
适用场景
- 01设计新的 OLTP 表结构
- 02使用 EXPLAIN 排查慢查询
- 03安全规划生产数据库变更
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pageai-pro/ ralph-loop --skill mysql安装后在 Claude Code 中输入/mysql确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/character-sets.mdcomposite-indexes.mdconnection-management.mdcovering-indexes.mddata-types.mddeadlocks.mdexplain-analysis.mdfulltext-indexes.mdindex-maintenance.mdisolation-levels.mdjson-column-patterns.mdn-plus-one.mdonline-ddl.mdpartitioning.mdprimary-keys.mdquery-optimization-pitfalls.mdreplication-lag.mdrow-locking-gotchas.md详细介绍
MySQL
使用此技能进行安全且可衡量的 MySQL/InnoDB 更改。
工作流
- 明确工作负载和约束(读写比例、延迟目标、数据量、MySQL 版本、托管平台)。
- 只阅读下方各部分链接的相关参考文件。
- 提出能够解决问题的最小改动,并说明权衡。
- 通过证据进行验证(
EXPLAIN、EXPLAIN ANALYZE、锁/连接指标,以及适用于生产环境的上线步骤)。 - 对于生产环境更改,提供回滚方案和部署后验证。
Schema 设计
- 对写入密集型 OLTP 表,优先使用较窄、单调递增的主键(
BIGINT UNSIGNED AUTO_INCREMENT)。 - 避免将随机 UUID 值用作聚簇主键;如果需要外部 ID,请将 UUID 存储在单独的唯一列中。
- 始终使用
utf8mb4/utf8mb4_0900_ai_ci。优先使用NOT NULL,并选择DATETIME而非TIMESTAMP。 - 使用查找表而非
ENUM。规范化至 3NF;仅针对经测量确认的热点路径进行反规范化。
参考:
索引
- 复合索引顺序:先等值,再范围/排序(最左前缀规则)。
- 范围谓词会阻止后续列使用索引。
- 二级索引会隐式包含主键。对长字符串使用前缀索引。
- 通过
performance_schema审查索引——删除count_read = 0的索引。
参考:
分区
- 对时间序列表(>50M 行)或大型表(>100M 行)进行分区。尽早规划——事后改造需要完整重建。
- 在每个唯一键/主键中包含分区列。始终添加
MAXVALUE兜底分区。
参考:
查询优化
- 检查
EXPLAIN——危险信号:type: ALL、Using filesort、Using temporary。 - 使用游标分页,而非
OFFSET。避免在WHERE中对索引列使用函数。 - 批量插入(500–5000 行)。无需去重时使用
UNION ALL,而非UNION。
参考:
事务与锁
- 默认使用
REPEATABLE READ(间隙锁)。在高争用情况下使用READ COMMITTED。 - 按一致的顺序访问行可避免死锁。遇到错误 1213 时,采用退避策略重试。
- 在事务外执行 I/O。谨慎使用
SELECT ... FOR UPDATE。
参考资料:
运维
- 尽可能使用在线 DDL(
ALGORITHM=INPLACE);先在副本上测试。 - 优化连接池配置,避免负载过高时耗尽
max_connections。 - 监控复制延迟;写入期间避免从副本读取过时数据。
参考资料:
防护措施
- 优先依据实测证据,而非一概而论的经验法则。
- 提供建议时,注明 MySQL 版本特定的行为。
- 执行破坏性数据操作(删除表、删除数据或清空表)前,先征得用户明确批准。
评论
支持 Markdown