秒级更改列

最近更新时间:2024-10-17 22:03:12

我的收藏

功能介绍

秒级更改列操作只会在数据字典表中记录列修改信息,避免了以往更改列操作时必须做的数据拷贝,从而大幅缩短大表更改列所需的时间,减少对应用系统的影响以及资源的消耗。

支持版本

内核版本 MySQL 8.0 20230630及以上。

适用场景

适用于需要对数据量大的表进行更改列操作的场景。

测试结果

表行数
未使用秒级更改列特性变更时长
秒级更改列特性变更时长
100万
22.9秒
0.01秒
1000万
13分39.72秒
0.01秒
1亿
3小时51分16.40秒
0.01秒

使用说明

秒级更改列语法 ALTER TABLE 新增 algorithm = instant 子句,更改列操作可通过如下语句进行:
ALTER TABLE modify_tab_col MODIFY COLUMN c1 BIGINT,ALGORITHM=INSTANT;
新增参数 cdb_instant_modify_column_enabled 用于控制秒级更改列功能,可以设置为 ON/OFF。
参数名
状态
类型
默认
参数值范围
说明
cdb_instant_modify_column_enabled
yes
bool
OFF
ON/OFF
功能开关,是否打开秒级更改列功能。
说明:
用户目前无法直接修改以上参数的参数值,如需修改可 提交工单

秒级更改列限制

只支持修改列类型,不支持修改字段的 nullable,unsigned/signed,charset,但支持修改 default 属性。
只支持部分类型的修改,且只能增加长度,目前仅支持以下类型的转换:char 和 varchar 之间,binary 和 varbinary 之间,以及 tinyint/smallint/mediumint/int/bigint 之间的相互转换。
例如:
char(10) → char(100)
char(10) → varchar(100)
varchar(10) → char(100)
varchar(10) → varchar(100)
binary(10) → binary(100)
binary(10) → varbinary(100)
varbinary(10) → binary(100)
varbinary(10) → varbinary(100)
tinyint/smallint/mediumint/int → bigint
tinyint/smallint/mediumint → int
tinyint/smallint → mediumint
tinyint → smallint
注意:
不支持 char/varchar 和 binary/varbinary 和 integer 之间的修改,例如,不支持 char → binary,binary → varchar 等。integer 类型需向更大取值范围更改,例如,不支持 bigint → int,int → smallint 等。
单个 column 只能 instant modify 一次,可以同时 instant modify 多个 column。
单个 column 第一次 instant add/modify 后,第二次修改此列只能以非 instant 方式进行。
instant add columns 和 instant modify columns 的操作需要分开执行,可以先执行 instant add columns,再执行 instant modify columns,或先执行 instant modify columns,再执行 instant add columns。不能 instant modify 之前 instant add 的列。
不能同时修改列名和列类型,可以先修改列名再修改列类型。
不支持 import/export。
不支持加密与压缩。