mysql 8 新特性一 ALGORITHM=INSTANT 实现的快速DDL
参考 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html
在线DDL之 快速增加列(秒级别的),并不会造成业务抖动。该功能自 MySQL 8.0.12 版本引入,是由腾讯游戏DBA团队贡献,我国程序员还是挺厉害的嘛。注意一下,此功能只适用于 InnoDB 表。实际上MySQL 5.7就已支持 Online DDL,虽说大部分 DDL 不影响对表DML操作,但是依然会消耗非常多的时间,且占用额外的磁盘空间,并会造成主从延迟,或者影响表的查询速度。有了这个ALGORITHM=INSTANT 就可应对瞬息万变的需求了。。
ALGORITHM=INSTANT 目前对6种ddl有效:
实际试验下,使用 mysql5.7的INPLACE 算法 时间: 52s。
使用 Instant Add Column ,时间:0.39 s。 果然是秒级别添加
当然我们不需要显式指定algorithm=instant;mysql会优先使用INSTANT算法来进行ddl的;若显式指定algorithm=instant 同时目标ddl不支持就会报错。如下,DROP COLUMN 时指定则报错
添加或删除virtual 列
添加或删除列默认值
修改 ENUM 定义
修改索引类型
重命名表,好像和5.7的INPLACE算法也没啥时间上的区别。INPLACE的rename table已经足够快了
还有一些特殊情况不能使用ALGORITHM=INSTANT的:
Instant Add Column只能将新字段添加到表的尾巴上,不能添加到中间!
不支持压缩表,即该表行格式不能是 COMPRESSED。
不支持包含全文索引的表;不支持临时表;不支持那些在数据字典表空间中创建的表。这些就不一一验证了。平时操作时要注意下!
扩展阅读:www.sony.com.cn ... sql and or ... sql between and ... x y mod3 ... python mysql ... mysql的事务不具有的特征 ... mysql js ... mac pro m2 ... 为什么不能用yes i m ...