1. MySQL InnoDB Online DDL 加列,ALGORITHM=INSTANT、INPLACE?
MySQL InnoDB 在线加列时 ALGORITHM=INSTANT 与 INPLACE 有何区别?
- INSTANT 与 INPLACE 算法的含义
- 加列的元数据操作 vs 表重建
- 适用条件与限制
MySQL 8.0 加列支持 ALGORITHM=INSTANT 与 ALGORITHM=INPLACE。INSTANT 只修改元数据,不重建表、不拷贝数据、不锁表,几乎瞬时完成,是加列的最优选择;但只支持"在表末尾加列"(除非 8.0.29+ 支持在任意位置加),且列数不能超过限制。INPLACE 是"原地修改",通常在表末尾加列时也无需重建数据,在线操作允许并发 DML,但可能重建索引或需要额外空间。两者都支持 Online DDL(不阻塞业务读写),但 INSTANT 更快。若加列会改变数据行长度导致需要重建,则退化为 COPY 或全表重建。
加列优化的关键是"是否重写数据"。INSTANT 只改元数据,INPLACE 可能重建部分结构,COPY 则全表拷贝。选择算法要在满足语义前提下尽量用 INSTANT/INPLACE 避免阻塞。
ALTER TABLE t ADD COLUMN c INT;
-- 显式指定算法
ALTER TABLE t ADD COLUMN c INT, ALGORITHM=INSTANT;
ALTER TABLE t ADD COLUMN c INT, ALGORITHM=INPLACE;