OnlineDDL 说明

最近更新时间:2025-12-24 12:03:42

我的收藏
本文说明 TDSQL Boundless 对 OnlineDDL 的支持。TDSQL Boundless 已支持大部分的 OnlineDDL,包括部分只需要修改元数据的 Inplace DDL。

对 Online DDL 的支持

二级索引

操作项
语法支持
在线更改
不支持在线更改原因
仅修改元数据
对用户数据的操作
支持并发 DML
Creating or adding a secondary index
Yes
Yes
/
No
需要数据回填
Yes
Dropping an index
Yes
Yes
/
No
需要异步删除数据
Yes
Renaming an index
Yes
Yes
/
No
/
Yes
Adding a FULLTEXT index
No
No
暂不支持全文索引
/
/
/
Adding a SPATIAL index
No
No
暂不支持空间索引
/
/
/
Changing the index type
No
No
引擎只支持普通索引,不支持 Btree/Hash 等
/
/
/

主键

涉及主键修改的 DDL 都不支持 Online 方式。
操作项
语法支持
在线更改
不支持在线更改原因
仅修改元数据
对用户数据的操作
支持并发 DML
Adding a primary key
Yes
No
需要重新组织数据
No
需要锁表 COPY
No
Dropping a primary key
Yes
No
需要重新组织数据
No
需要锁表 COPY
No
Dropping a primary key and adding another
Yes
Yes
/
No
需要锁表 COPY
Yes

操作项
语法支持
在线更改
不支持在线更改原因
仅修改元数据
对用户数据的操作
支持并发 DML
Adding a column
(尾部追加)
Yes
Yes
/
Yes
Yes
Adding a column
(非尾部追加)
Yes
Yes
/
No
需要 Online Copy
Yes
Dropping a column
Yes
Yes
/
No
需要 Online Copy
Yes
Renaming a column
Yes
Yes
/
Yes
/
Yes
Reordering columns
Yes
Yes
/
No
需要 Online Copy
Yes
Setting a column default value
Yes
Yes
/
Yes
/
Yes
Changing the column data type
Yes
Yes
/
No
需要 Online Copy
Yes
Extending VARCHAR column size
(column is not part of primary key)
Yes
Yes
/
视情况而定,详见尾部说明
视情况而定,详见尾部说明
Yes
Extending VARCHAR column size
(column is part of primary key)
Yes
Yes
/
No
需要 Online Copy
Yes
Dropping the column default value
Yes
Yes
/
Yes
/
Yes
Changing the auto-increment value
Yes
Yes
/
Yes
/
Yes
Making a column NULL
Yes
Yes
/
No
需要 Online Copy
Yes
Making a column NOT NULL
Yes
Yes
/
No
需要 Online Copy
Yes
Modifying the definition of an ENUM or SET column
Yes
Yes
/
Yes
/
Yes

操作项
语法支持
在线更改
不支持在线更改原因
仅修改元数据
对用户数据的操作
支持并发 DML
Changing the ROW_FORMAT
No
No
引擎不支持
/
/
/
Changing the KEY_BLOCK_SIZE
No
No
引擎不支持
/
/
/
Setting persistent table statistics
No
No
引擎不支持
/
/
/
Specifying a character set
Yes
Yes
/
No
需要 Online Copy
Yes
Converting a character set
Yes
Yes
/
No
需要 Online Copy
Yes
Optimizing a table
Yes
/
使用该语法时直接返回成功,实际未做任何操作,因为引擎会执行自动 compaction,该语法的行为并不适用。
/
/
/
Rebuilding with the FORCE option
Yes
Yes
/
No
需要 Online Copy
Yes
Performing a null rebuild
No
No
引擎不支持
/
/
/
Renaming a table
Yes
Yes
/
Yes
/
Yes

分区

操作项
语法支持
在线更改
不支持在线更改原因
仅修改元数据
对用户数据的操作
支持并发 DML
PARTITION BY
Yes
Yes
/
No
需要 Online Copy
Yes
ADD PARTITION
Yes
Yes
/
Yes
/
Yes
DROP PARTITION
Yes
Yes
/
Yes
/
Yes
DISCARD PARTITION
No
No
引擎不支持
/
/
/
IMPORT PARTITION
No
No
引擎不支持
/
/
/
TRUNCATE PARTITION
Yes
Yes
/
/
需要异步删除数据
Yes
COALESCE PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
REORGANIZE PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
EXCHANGE PARTITION
No
No
引擎不支持
/
/
/
ANALYZE PARTITION
No
No
引擎不支持
/
/
/
CHECK PARTITION
No
No
引擎不支持
/
/
/
OPTIMIZE PARTITION
Yes
/
使用该语法时直接返回成功,实际未做任何操作,因为 引擎会执行自动 compaction,该语法的行为并不适用。
/
/
/
REBUILD PARTITION
Yes
Yes
/
No
需要 Online Copy
Yes
REPAIR PARTITION
Yes
No
未算作 DDL
/
/
/
REMOVE PARTITIONING
Yes
Yes
/
No
需要 Online Copy
Yes

表空间

目前暂不支持表空间(Tablespace)相关操作。

生成列

目前暂不支持生成列(Generated column)相关操作。

外键

目前暂不支持外键(Foreign keys)相关操作。

与社区版 MySQL 支持情况对比

将 TDSQL Boundless 的 Inplace 和 Online Copy 以及 社区版 MySQL8.0 的 Instant 和 Inplace 均视为 Online 操作,两者对于常用 DDL 的差异对比说明如下。
操作项
TDSQL Boundless
MySQL
Converting a character set
支持 DML 并发
不支持 DML 并发
Changing the column data type
支持 DML 并发
不支持 DML 并发
PARTITION BY
支持 DML 并发
不支持 DML 并发
Extending VARCHAR column size
支持 DML 并发
部分情况下支持,对 VARCHAR(X) 中的 X 有限制
Adding a primary key
不支持 DML 并发
支持 DML 并发
说明:
TDSQL Boundless 目前尚有少量 DDL 没有支持,因此此处只说明了对比 TDSQL Boundless 和社区版 MySQL 8.0均支持的部分的差异;
对于 Extending VARCHAR column size 类型,社区版 MySQL8.0会对 VARCHAR(X) 指定的字符长度做出限制,主要涉及存储的 pack length。假设以UTF8MB4作为字符集,某字段所占的字节数为 X*4。
进行 DDL 时,假设当前 VARCHAR 字段 X*4<256,且修改后的字段 Y*4<256;则支持 Inplace;
进行 DDL 时,假设当前 VARCHAR 字段 X*4<256,但修改后的字段 Y*4>=256;则不支持 Inplace;
示例:
CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
ALTER TABLE t1 CHANGE COLUMN b b VARCHAR(20), ALGORITHM=INPLACE, LOCK=NONE; → 成功
ALTER TABLE t1 CHANGE COLUMN b b VARCHAR(64), ALGORITHM=INPLACE, LOCK=NONE; → 失败