Contents

前言:

Mysql 8.0版本合并了腾讯互娱数据库团队的Patch,可以实现秒级添加字段,这个功能可谓是mysql数据库攻城狮的福音,解决了之前5.6,5.7版本添加字段很高的运维成本。由于添加索引需要扫描行记录,所以添加索引不支持秒加,添加字段只是元数据打个标记,所以支持秒加。

限制:

仅支持在一条语句中添加列,也就是说,如果同一条语句中还有其他非INSTANT操作,则无法立即完成
仅支持最后添加列,不支持在现有列的中间
不支持COMPRESSED行格式
不支持已经有全文索引的表
不支持DD表空间中的任何表
不支持临时表

MySQL官方团队博客关于秒加字段的介绍:
MySQL 8.0: InnoDB now supports Instant ADD COLUMN

下面是验证mysql8.0版本秒级添加字段的过程

加字段可以秒加

mysql> ALTER TABLE `guo_test`.`test_user` ADD COLUMN `next_id` INT (11) NULL AFTER `open_id`,ALGORITHM=INSTANT; 
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 1

加索引不支持INSTANT

mysql> ALTER TABLE `guo_test`.`test_user` ADD KEY `idx_next_id` (`next_id`) USING BTREE,ALGORITHM=INSTANT; 
1845 - ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

索引只能通过COPY/INPLACE方式

mysql> ALTER TABLE `guo_test`.`test_user` ADD KEY `idx_next_id` (`next_id`) USING BTREE;
Query OK, 0 rows affected (8.78 sec)
Records: 0  Duplicates: 0  Warnings: 0

重建索引支持INSTANT

mysql> ALTER TABLE test_user DROP KEY idx_next_id,ADD KEY idx_next_id (next_id) USING BTREE,ALGORITHM=INSTANT; 
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除索引不支持INSTANT

mysql> ALTER TABLE test_user DROP COLUMN next_id ,ALGORITHM=INSTANT; 
1845 - ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

删除索引只能通过COPY/INPLACE方式

mysql> ALTER TABLE test_user DROP COLUMN next_id; 
Query OK, 0 rows affected (44.35 sec)
Records: 0  Duplicates: 0  Warnings: 0
Contents