mysql 8.0版本增加字段,利用的online ddl算法是什么?
mysql 8.0.12版本开始支持 Instant online ddl, 在那之前 增加字段使用的是Inplace算法,更早的版本是使用的COPY算法。
Instant算法相对于Inplace和copy有什么优势?
Instant算法,只需要修改数据字典的元数据,无需拷贝数据也不需要rebuild table,同时过程中不需要加MDL写锁,也不会阻塞DML。整个ddl可以瞬间完成。
增加字段能够用到Instant算法有哪些限制条件?
增加字段的语句不能和其他不支持instant算法的动作一起使用,比如add column不能和add index、drop index写到一个alter 语句中。

在8.0.29版本之前,Instant算法只支持增加字段到表的最后一列。增加字段如果没有加after\First关键字,会默认加到表的最后一列,所以我们在执行add column语句时,最好不要加after\First关键字。
带有全文索引的表不支持使用Instant或Inplace算法添加字段,只能使用Copy算法, 也就是说给带有索引的表增加字段会阻塞DML。
alter table `booking_order` add column name varchar(20),algorithm = Instant
ALGORITHM=INSTANT is not supported. Reason: InnoDB presently supports one FULLTEXT index creation at a time. Try ALGORITHM=COPY/INPLACE.
表的row_format=COMPRESSED,不支持使用Instant增加字段,但支持Inplace。
是否可以在一个alter语句里使用instant增加多个字段?
可以。
ALTER TABLE t1 ADD COLUMN c2 INT, ADD COLUMN c3 INT, ALGORITHM=INSTANT;

点个“赞 or 在看” 你最好看!

👇👇👇 谢谢各位老板啦!!!
文章转载自PostgreSQL运维技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




