mysql-norebuild的ddl测试

一、简介

为了保证需要注意的有norebuild和ignore两种

/** Operations that InnoDB cares about and can perform without rebuild */
static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD
	= INNOBASE_ONLINE_CREATE
	| INNOBASE_FOREIGN_OPERATIONS
	| Alter_inplace_info::DROP_INDEX
	| Alter_inplace_info::DROP_UNIQUE_INDEX
	| Alter_inplace_info::RENAME_INDEX
	| Alter_inplace_info::ALTER_COLUMN_NAME
	| Alter_inplace_info::ALTER_COLUMN_EQUAL_PACK_LENGTH
	| Alter_inplace_info::ALTER_INDEX_COMMENT
	| Alter_inplace_info::ADD_VIRTUAL_COLUMN
	| Alter_inplace_info::DROP_VIRTUAL_COLUMN
	| Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER
        | Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH;
	/* | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_TYPE; */
/** Operations for altering a table that InnoDB does not care about */
static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_INPLACE_IGNORE
	= Alter_inplace_info::ALTER_COLUMN_DEFAULT
	| Alter_inplace_info::ALTER_COLUMN_COLUMN_FORMAT
	| Alter_inplace_info::ALTER_COLUMN_STORAGE_TYPE
	| Alter_inplace_info::ALTER_VIRTUAL_GCOL_EXPR
	| Alter_inplace_info::ALTER_RENAME;

二、详细测试结果

DDL操作细节解释版本情况
删除索引(索引,联合索引,唯一索引(注意不包括主键))不需要rebuild
更改索引长度,即更改varchar字段长度不需要rebuild5.7.23及以后
更改索引注释不需要rebuild ,但是alter table语句没有modify index的操作,所以无法验证
字段重命名不需要rebuild ,以change来实现
字段长度变更(数值)数值类型(tinyint,int,bigint的括号内的内容并不代表长度,只是会在fill zero的情况在左侧补充0而已)不需要rebuild
字段长度变更(float)不需要rebuild(增加或缩减整数位,小数位都是norebuild)
字段长度变更(decimal)copy
字段长度变更(char)copy
字段长度变更(varchar)同字节(0-255(utf8/3,utf8mb4/4),256-65535)内增加长度不需要rebuild, 缩减长度需要copy
ENUM,SET字段定义内容变更添加元素不需要rebuild(enum(“a”) -> enum(“a”,“b”)),缩减元素copy
加字段8.0.12及以上增加了ALGORITHM=INSTANT,添加列不需要rebuild了,详细可查看官网https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html8.0.12及以上
更改字段默认值不更改innodb层,所以也是瞬间完成
重命名表不更改innodb层,所以也是瞬间完成

ps: 虚拟字段很少用,也就不做详细解释了,另外一个小技巧,如果不确定是否rebuild可以在环境上先测试,norebuild的变更都会在1s之内完成,超过1s的可以直接停掉,不会对业务有什么影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值