「 TDSQL 是分布式数据库,一张逻辑表背后是多个物理分片。分片键(shardkey)决定了数据怎么散、查询怎么走。分片键选错,轻则数据倾斜,重则每条查询都跨分片全表扫。 」
一、六步落地核心链路

▲ 六步链路图(对照正文)
-
- 分片键建表时定死 :建表语句里用 shardkey=列名 指定,后期 ALTER TABLE 不支持改分片键,选错只能重建表。
-
- 主键与唯一索引必须含分片键:广播表除外,否则建表直接报错,这是分布式一致性的硬要求。
-
- 选高基数列:数据经过 hash 后均匀分布到各分片,避免少数分片被压垮。
-
- 选高频查询列:让 WHERE 或 JOIN 最常带的列当分片键,查询尽量落单分片,避免跨分片。
-
- 验证分布均衡 :观察各分片数据量与负载是否均匀,热点分片盯 Threads_running。
-
- 路由与读写分离 :读从库 hint /*slave*/ 必须加 -c 保留注释;管理命令 /*proxy*/ 仅用于 help、show config、show status。
二、对照:反例 vs 推荐

▲ 对照图(对照正文)
|--------|----------------------------|----------------------------------------------|
| 场景 | 反例(容易踩) | 推荐写法 |
| 分片键选择 | 用性别、状态这类低基数列 | 选高基数且分布均匀的列 |
| 查询路由 | 分片键选了查询从不带的列 | 选高频 WHERE 或 JOIN 条件列 |
| 主键设计 | 主键不含分片键 | 主键与唯一索引必须包含 shardkey |
| 读写分离 | 连客户端漏写 -c | 连接加 -c 保留 hint 注释 |
| 管理命令 | 把 /*proxy*/ 套在 EXPLAIN 上 | /*proxy*/ 仅用于 help、show config、show status |
三、常见故障速查命令
|-----------|-------------|----------------------------------------|
| 场景 | 注意点 | 命令 |
| 建表指定分片键 | 后期不可改,务必想清楚 | CREATE TABLE t (...) shardkey=order_id |
| 监控热点 | 看活跃线程而非连接数 | 关注 Threads_running 指标 |
| 误删恢复 PITR | 不直接改原实例 | 走克隆新实例抽数导回 |
带路由注释的语句容易在表格里被客户端当普通注释过滤,建议直接复制到客户端执行,下面单独列出:
-- 强制读从库:客户端连接必须加 -c 保留 hint
SELECT /*slave*/ * FROM t WHERE order_id = 1001;
-- 管理命令前缀:仅 help、show config、show status 三条可用
/*proxy*/ SHOW STATUS;
/*proxy*/ SHOW CONFIG;

▲ 一图速查:核心命令汇总(建议收藏)
小结
分片键在创建表时就定下走向,后期改不了;主键和唯一索引必须包含分片键;优先选"高基数加业务高频查询"的列,让数据均匀、查询落单分片。想系统掌握分布式数据库,可以关注腾讯云数据库工程师认证路线,把分片、路由、容灾串成体系。
------ 本文由 云贝教育 整理分享