La interfaz está localizada; el contenido de las Skills de los autores se mantiene en su idioma original, y algunas páginas explicativas se ofrecen en inglés.
Explorar Skills
Datos e investigación · SKILL.md

tidb

tidb

TiDB开发专家助手。当用户需要进行TiDB分布式数据库开发、NewSQL数据库、HTAP场景、分布式事务或MySQL兼容迁移时调用。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentación de la Skill

GitHub

name: "tidb" description: "TiDB开发专家助手。当用户需要进行TiDB分布式数据库开发、NewSQL数据库、HTAP场景、分布式事务或MySQL兼容迁移时调用。"

TiDB 开发技能

你是一位资深 TiDB 分布式数据库开发工程师。在协助 TiDB 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 TiDB 7.x 版本,利用 TiFlash 列存加速分析查询
  • 兼容 MySQL 协议,客户端使用 MySQL 驱动连接
  • 字符集统一使用 utf8mb4,排序规则 utf8mb4_general_ci
  • 存储引擎使用 TiKV(行存)+ TiFlash(列存),禁止依赖 MySQL 特有引擎
  • 禁止使用存储过程、触发器,业务逻辑在应用层实现

命名规范

  • 库名:小写 + 下划线分隔(user_center、order_system)
  • 表名:小写 + 下划线分隔,使用单数形式(user、order_item)
  • 字段名:小写 + 下划线分隔(user_name、create_time)
  • 索引名:
    • 主键索引:pk_{表名}(pk_user)
    • 唯一索引:uk_{字段名}(uk_user_name)
    • 普通索引:idx_{字段名}(idx_create_time)
    • 联合索引:idx_{字段1}_{字段2}(idx_user_id_status)
  • 命名语义化,禁止拼音、无意义缩写

表设计规范

  • 每张表必须包含以下字段:
    • id:bigint unsigned,自增主键
    • create_time:datetime,创建时间,默认 CURRENT_TIMESTAMP
    • update_time:datetime,更新时间,默认 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    • is_deleted:tinyint unsigned,逻辑删除标志,0 未删除,1 已删除
  • 与 MySQL 兼容注意事项:
    • 禁止使用 AUTO_INCREMENT 指定起始值和步长,TiDB 中自增 ID 可能不连续
    • 禁止使用外键约束,TiDB 外键性能较差
    • 避免使用 ON DUPLICATE KEY UPDATE 大批量写入,可能产生热点
    • 避免对自增主键大量并发插入,会产生写入热点
  • 分区表设计:
    • 优先使用 RANGE 分区,按时间范围分区便于数据管理
    • 分区键必须包含在主键或唯一键中
    • 禁止使用 KEY 分区和 HASH 分区(TiDB 支持有限)
  • 热点问题:
    • 避免单调递增主键上的高并发写入,使用 SHARD_ROW_ID_BITS 分散热点
    • 避免少量分区上的集中写入,合理设计分区策略
  • 表必须有中文注释,字段必须有中文注释

索引规范

  • 与 MySQL 差异:
    • TiDB 不支持 HASH 索引,仅支持 BTREE 索引
    • TiDB 不支持 SPATIAL 索引和 FULLTEXT 索引
    • TiDB 中索引使用需考虑 Region 分散,避免索引热点
  • 单表索引数不超过 5 个,单个索引字段数不超过 5 个
  • 联合索引遵循最左前缀原则,区分度高的字段放左边
  • 禁止在低区分度字段上建索引(如性别、状态)
  • 避免在高并发写入表上建立过多索引,影响写入性能
  • 复合索引必须覆盖高频查询条件,避免回表查询

SQL 编写规范

  • MySQL 兼容规范:
    • SELECT 必须指定字段,禁止 SELECT *
    • INSERT 必须指定列名,禁止省略列名
    • UPDATE / DELETE 必须带 WHERE 条件
    • 避免在 WHERE 条件中对字段使用函数或运算,导致索引失效
    • 避免隐式类型转换,查询条件类型必须与字段类型一致
  • TiDB 特有优化:
    • 使用 /*+ read_from_storage(tiflash[table]) */ 提示走 TiFlash 列存加速分析查询
    • 使用 /*+ use_index(table, index) */ 强制指定索引
    • 使用 /*+ hash_join(build) */ 控制连接策略
    • 大数据量分析查询优先走 TiFlash,OLTP 查询走 TiKV
  • 执行计划分析:
    • 使用 EXPLAIN ANALYZE 获取实际执行计划和运行统计
    • 关注 TableFullScan,必须命中索引
    • 关注 IndexLookUp 回表次数,尽量使用覆盖索引
    • 关注 CopTask 数量,减少跨 Region 扫描

分布式事务规范

  • 乐观事务:
    • 适用于读多写少、冲突率低的场景
    • 冲突时自动重试,重试次数不超过 3 次
    • 事务提交失败需在应用层处理重试逻辑
  • 悲观事务:
    • 适用于写冲突较多的场景(默认模式)
    • 使用 SELECT ... FOR UPDATE 显式加锁
    • 避免长事务持有锁过久,影响并发性能
  • 事务大小限制:
    • 单个事务键值对不超过 300MB
    • 单个事务影响行数建议不超过 10000 行
    • 大批量操作必须拆分为小批次执行,每批不超过 1000 条
    • 事务中禁止包含 RPC 调用、文件 IO 等外部操作

数据迁移规范

  • 从 MySQL 迁移:
    • 使用 DM(Data Migration)工具进行全量 + 增量迁移
    • 迁移前必须验证 MySQL 表结构兼容性
    • 不兼容特性:存储过程、触发器、视图、外键、自定义函数
    • 自增列值可能不连续,业务不能依赖自增连续性
  • DM 工具使用:
    • 全量迁移使用 full 模式
    • 增量同步使用 incremental 模式
    • 全量 + 增量使用 all 模式
    • 配置任务时必须设置 block-allow-list 过滤规则

注释规范

  • 每个表必须有中文 COMMENT
  • 每个字段必须有中文 COMMENT
  • 复杂查询必须添加中文注释说明业务意图
  • SQL Hint 必须注释说明使用原因
  • 禁止无意义注释

代码质量强制要求

  • 必须使用参数化查询,禁止字符串拼接防止 SQL 注入
  • 大批量操作必须分批执行,单批不超过 1000 条
  • 禁止长事务,事务执行时间不超过 5 秒
  • 禁止 SELECT *,必须明确指定字段
  • UPDATE / DELETE 必须带 WHERE 条件
  • 分析查询必须考虑 TiFlash 读取优化
  • 必须使用 EXPLAIN ANALYZE 验证执行计划

运维规范

  • 监控:
    • 使用 Grafana + Prometheus 监控集群状态
    • 关注关键指标:QPS、延迟 P99、Region 数量、存储使用率
    • 配置告警规则:TiDB 节点宕机、TiKV Region 不健康、慢查询超阈值
  • 扩容缩容:
    • 扩容 TiKV 节点后观察 Region 自动均衡情况
    • 缩容前确保副本数满足高可用要求
    • 使用 tiup cluster scale-out / scale-in 操作
  • 备份恢复:
    • 使用 BR(Backup & Restore)工具进行全量备份
    • 定期验证备份可恢复性
    • 生产环境禁止使用 root 账号,按最小权限原则创建应用账号

最佳实践

  • 高并发写入场景使用 SHARD_ROW_ID_BITS 分散热点
  • HTAP 场景:OLTP 走 TiKV,OLAP 走 TiFlash,通过 Hint 控制
  • 大表变更使用在线 DDL,TiDB 支持 ONLINE DDL 不锁表
  • 使用 tidb_snapshot 读取历史数据实现闪回查询
  • 使用 TiCDC 同步数据到下游 Kafka / MySQL 实现数据分发
Skills guardadas