tencent cloud

TDSQL Boundless

产品动态
产品简介
产品概述
应用场景
产品架构
实例类型
兼容性说明
使用规范建议
自研内核
内核概述
内核版本更新动态
功能类特性
性能类特性
产品计费
计费概述
购买方式
价格详情
续费说明
欠费说明
退费说明
快速入门
创建实例
连接实例
用户指南
数据迁移
数据同步/订阅
实例管理
参数配置
账号管理
安全组
备份与恢复
数据库审计
标签管理
实践教程
Online DDL 的技术演进与使用实践
锁机制解析与问题排查实践
数据智能调度及相关性能优化实践
TDSQL Boundless 选型指南与实践教程
开发指南
开发指南(MySQL 兼容模式)
开发指南(HBase 兼容模式)
性能调优
性能调优概述
SQL 调优
DDL 调优
性能白皮书
性能概述
TPC-C 测试
Sysbench 测试
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Security Group APIs
Task APIs
Backup APIs
Rollback APIs
Parameter APIs
Database APIs
Data Types
Error Codes
通用参考
系统原理
SQL 参考
数据库参数说明
TPC-H 基准测试数据模型参考
错误码信息
安全与合规
常见问题
服务协议
服务等级协议
服务条款
隐私政策
数据处理和安全协议
联系我们
词汇表

使用规范建议

PDF
聚焦模式
字号
最后更新时间: 2026-04-03 16:53:23

建表规范

表类型选择

建表前必须先确定表类型,三种类型不可互转(除单表→分区表):
表类型
适用场景
特点
普通表(单表)
数据量小、无分布需求
所有数据在一个 RG
分区表
大数据量、需水平扩展
数据按规则分布到多 RG
同步表
系统配置、维度表、读多写少
全节点强同步副本

主键规范

必须显式定义主键,无主键会导致写入热点(Write Hotspot)
避免单调递增主键(如纯自增 INT),同样会造成写入热点,推荐使用复合主键或带随机性前缀
自增列必须独立作为主键或唯一索引,否则可能出现值重复
自增值只保证全局唯一,不保证连续(分片缓存机制,默认 batch=100)
若业务要求连续自增,需设置 tdsql_auto_increment_batch_size=1(性能会下降)
分区表:主键和所有唯一索引必须包含分区键,否则建表失败

表结构设计规范

单表列数建议不超过60(硬限制4096列)
单行数据建议不超过64KB(硬限制默认64MB,可调至512MB)
表名建议控制在32字符以内(硬限制64字符)
标识符(DB/Table/Column/Index)最大均为64字符
存储引擎统一为 RocksDB,建表时无论指定什么引擎都会被忽略

数量限制

项目
限制
单表最大列数
4096
单表最大索引数
64
单表最大分区数
8192
索引最大字节数
3072字节
索引最大列数
16列/索引
单行最大长度
默认64MB,最大512MB(参数 tdstore_txn_max_entry_size
最大建表数
与节点规格相关(1万~8万)

分区表规范

分区策略选择

策略
适用场景
键类型
HASH
均匀散列,整数键
整数类型
KEY
均匀散列,字符串键
任意类型
RANGE
时间范围、ID 区间查询
整数/日期
LIST
枚举值分类(如地区)
整数

分区键规范

主键和所有唯一索引必须包含分区键(违反则建表失败,这是最常见错误)
查询 WHERE 子句中必须携带分区键,否则会扫描所有分区(全分区扫描)
不要通过 UPDATE 修改分区键的值,会触发跨分区数据迁移,性能差且可能失败

分区数规划

推荐分区数 = 预期最大节点数 × 2
分区数过少会导致扩容时数据分布不均;过多增加管理开销
运行时修改分区定义可能需要做拷表 DDL,DDL 时长和 IO 开销随数据量增加

Partition Policy(数据分布策略)

-- 创建分布策略
CREATE PARTITION POLICY policy_name
PARTITION BY HASH(INT) PARTITIONS n;

-- 建表时绑定
CREATE TABLE t (...) PARTITION BY HASH(a) PARTITIONS n USING PARTITION POLICY policy_name;
支持将多张表的分区绑定在同一物理节点,减少分布式 Join 开销(适合关联查询频繁的表组)(目前支持 HASH 和 KEY 分区的一级分区表)
RANGE/RANGE COLUMNS 分区表可绑定时间调度 DP,实现冷数据自动归档(EXPIRESTART_TIMEEND_TIME
只有未绑定任何数据对象的 DP 才能被修改或删除

单表转分区表

-- 支持在线转换,不阻塞读写
ALTER TABLE t PARTITION BY HASH(id) PARTITIONS 16;

同步表规范

定义与场景

同步表写入时需强同步到所有有效 Follower 副本才返回,每个副本可提供强一致性读。
适用场景
全局系统配置表、参数表
数据仓库维度表(如商品类目、地区字典)
TPCC item 表等读多写少的小表
不适用场景
高频写入表(写性能受副本数影响,副本越多越慢)
大数据量表

创建语法

CREATE TABLE t (
id BIGINT PRIMARY KEY,
name VARCHAR(100)
) SYNC_LEVEL = NODE(ALL) DISTRIBUTION = NODE(ALL);
SYNC_LEVEL = NODE(ALL)DISTRIBUTION = NODE(ALL) 目前只支持 ALL,不能指定部分节点

使用限制

不能是分区表(同步表与分区表互斥)
不支持属性转换:同步表不能转为普通表,反之亦然
任意 Follower 节点故障时,写请求会卡顿一个租约时间(lease 时间,约秒级)
广播同步日志流一旦创建不会被销毁,即使删除所有同步表
副本数量多时写性能线性下降,谨慎在大集群中使用

事务规范

隔离级别

支持:Read Committed (RC)Repeatable Read (RR),默认 RR
RR 实为快照隔离(Snapshot Isolation),不会出现幻读,但可能出现写偏斜(Write Skew)
RC 级别下与 MySQL 差异:TDSQL Boundless 在 RC 下仍可能使用范围锁(MySQL RC 不加间隙锁)

事务大小限制

限制项
默认值
参数
单行最大
64MB
tdstore_txn_max_entry_size
单事务最大
1GB
tdstore_max_txn_size
超出限制报错写入失败,批量操作必须有重试机制
事务数据在提交前完全缓存在内存中,大事务落盘功能尚在开发中

事务使用规范

-- 推荐开启方式(三种均支持)
BEGIN;
START TRANSACTION;
SET autocommit = 0;
快照在第一条读写 SQL 执行时分配,不是 BEGIN 时
支持 SAVEPOINT 部分回滚
支持悲观事务:SELECT ... FOR UPDATE(排他锁)/ SELECT ... LOCK IN SHARE MODE(共享锁)

锁机制注意事项

无索引的悲观锁会升级为范围锁,可能锁整表,务必确保查询条件有索引
锁基于逻辑键值而非物理存储,与 InnoDB 行为有差异
记录不存在时行为与 MySQL 不同,不会升级为间隙锁

需要避免的事务用法

避免超大事务:单事务不超过1GB,超大批量操作用 BATCH LIMIT 拆分
XA 语法不生效:语法不报错但行为不符合 XA 语义,不要依赖 XA 实现分布式事务
不要长时间持有事务:可能导致 MVCC 版本积压,影响全局性能
避免无索引的 FOR UPDATE:极易导致全表范围锁

大批量删除

-- 使用 BATCH LIMIT 拆分大事务,每批原子,整体非原子
BATCH LIMIT 2000 DELETE FROM t WHERE create_time < '2024-01-01';
限制:
仅支持 DELETE(不支持 UPDATE/INSERT)
不支持多表删除
不能在事务内嵌套使用
DELETE 语句不能含 ORDER BY 和 LIMIT

索引规范

索引创建

二级索引创建默认使用 Online DDL,不阻塞读写
推荐使用 ALGORITHM=INPLACE(默认)
大表加索引建议在业务低峰期执行,并监控 INFORMATION_SCHEMA.DDL_JOBS

不支持的索引类型

FULLTEXT 全文索引(不支持)
SPATIAL 空间索引(不支持)
JSON 多值索引(不支持)
降序索引(不支持)
Online 方式添加/删除主键(不支持,需要 COPY 方式,会锁表)

索引限制

索引列最大3072字节
单索引最多16列
单表最多64个索引

DDL 操作规范

执行前检查

执行 DDL 前必须检查:
1. 确认存储空间充足(INPLACE DDL 需要临时空间)
2. 检查是否有慢查询或长事务
3. 查看数据分布是否均衡(严重倾斜时降低并行度)
4. 确认当前 CPU/IO 负载在合理范围

DDL 并行度控制

-- 数据倾斜时降低并行度(默认 8)
SET max_parallel_ddl_degree = 4; -- 或 2

-- 监控 DDL 进度
SELECT * FROM information_schema.ddl_jobs WHERE state != 'done';

不支持 Online DDL 的操作(需锁表 COPY)

所有主键相关 DDL(Add/Drop Primary Key)
EXCHANGE PARTITION
ANALYZE/CHECK PARTITION
修改字符集(某些情况)
修改列类型(某些情况)
说明:
与 MySQL 8.0 差异:TDSQL Boundless 在 PARTITION BYConverting charsetChanging column type 上支持 DML 并发,MySQL 不支持。

与 MySQL 的重要差异(必知)

不支持功能列表

功能
是否支持
说明
外键
TDStore 限制,报错
FULLTEXT 索引
报错1214
GIS/空间类型
不支持
生成列
不支持
XA 事务
⚠️
语法不报错但不生效
Event(事件调度器)
不支持
X 协议
不支持
LOB 部分更新
不支持
JSON 排序混合类型
不支持
只读账号/只读节点
⚠️
计划后续支持
全局索引
不支持

行为差异

存储引擎:统一强制 RocksDB,CREATE TABLE 中的 ENGINE= 被忽略。
自增列:全局唯一但不连续,高性能模式 batch=100。
网络访问:仅支持 VPC 内网,不支持公网访问。

SQL 编写规范

查询规范

分区表查询建议携带分区键在 WHERE 条件中,避免全分区扫描。
避免 SELECT *,明确列出所需字段。
大范围查询(如全表扫描)建议添加 LIMIT 保护。
使用 EXPLAIN 查看执行计划,确认分区裁剪(partition pruning)是否生效。

写入规范

批量写入推荐使用 INSERT INTO ... VALUES (...),(...),...,减少网络往返。
大批量写入考虑使用 Bulk Load 模式(tdstore_bulk_load 参数),性能可提升数倍,详细请参见 关于数据导入(Bulk Load 模式)
避免在事务中混合大量读写操作,超过1GB事务大小限制会直接报错。

Failover 注意事项

应用层需实现重试逻辑,建议指数退避重试3次。

常见陷阱汇总

陷阱
说明
规避方法
写入热点
无主键或单调递增主键
使用复合主键或带散列前缀
唯一索引缺分区键
建表失败
所有唯一索引必须包含分区键
自增值不连续
缓存机制导致
业务不依赖自增连续性
XA 不生效
语法合法但无 XA 语义
改用 TDSQL Boundless 原生分布式事务
无索引 FOR UPDATE
锁整表
确保查询条件有索引
大事务 OOM
1GB内存限制
拆分事务,使用 BATCH LIMIT
同步表写卡顿
Follower 故障时卡一个 lease
同步表只用于读多写少场景
Online DDL 加主键
不支持 Online,需锁表
建表时规划好主键
RC 下意外范围锁
与 MySQL RC 行为不同
关键业务实测验证锁行为
外键依赖
完全不支持
在应用层维护引用完整性

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈