ALTER TABLE执行后INFO字段明确显示实际算法:ALGORITHM=INPLACE(原地修改)、ALGORITHM=COPY(全表拷贝,高风险)或ALGORITHM=INSTANT(仅改元数据,MySQL 8.0.12+)。

看ALTER TABLE执行后的INFO字段输出
MySQL在执行完ALTER TABLE后,会返回一行状态信息,其中INFO列明确说明了实际采用的算法。这是最直接、无需额外工具的方法。
例如执行:
ALTER TABLE `user` ADD COLUMN `vip_level` TINYINT DEFAULT 0;成功后返回类似:
Query OK, 0 rows affected (0.02 sec)但关键在下一行(需客户端显示完整):
Records: 0 Duplicates: 0 Warnings: 0 INFO: ALGORITHM=INPLACE
- 如果看到
INFO: ALGORITHM=INPLACE,说明走的是原地算法 - 看到
INFO: ALGORITHM=COPY,说明触发了全表拷贝,风险极高 - 看到
INFO: ALGORITHM=INSTANT(MySQL 8.0.12+),说明只改元数据,几乎无感知
用EXPLAIN FORMAT=JSON预判加索引类DDL
对CREATE INDEX或ADD INDEX这类操作,MySQL 5.6+ 支持用EXPLAIN FORMAT=JSON提前判断是否支持INPLACE。虽然不能覆盖所有DDL类型,但对高频场景(如加二级索引)非常实用。
执行:
EXPLAIN FORMAT=JSON CREATE INDEX idx_email ON user(email);然后检查输出中的
"alter_algorithm": "INPLACE"字段是否存在且为"INPLACE"。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 该方法只适用于索引类DDL,
ADD COLUMN等结构变更不支持EXPLAIN - 注意:即使
EXPLAIN显示INPLACE,最终仍可能因锁竞争退化为COPY(比如有长事务持有MDL锁) - 必须用
FORMAT=JSON,普通EXPLAIN不显示算法信息
查performance_schema.table_lock_waits_summary_by_table确认锁行为
INPLACE ≠ 不锁表。它只是缩短锁持有时间,但准备和提交阶段仍需短暂排他MDL锁。如果你怀疑实际执行卡在锁上,可以查性能表验证是否发生了非预期的长时间锁等待。
执行:
SELECT * FROM performance_schema.table_lock_waits_summary_by_table WHERE OBJECT_SCHEMA = 'your_db' AND OBJECT_NAME = 'user' ORDER BY SUM_TIMER_WAIT DESC LIMIT 1;
- 重点关注
SUM_TIMER_WAIT和COUNT_STAR是否异常高——这往往意味着INPLACE被阻塞,背后可能是未提交事务占着MDL锁 - 配合
SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_SCHEMA = 'your_db' AND OBJECT_NAME = 'user';可定位具体是哪个线程在持锁 - 这个步骤不是判断“是否走INPLACE”,而是判断“为什么INPLACE没生效”
别信ALGORITHM=INPLACE硬指定的输出
很多人在语句里显式写ALGORITHM=INPLACE,看到执行成功就以为稳了。但MySQL实际执行时可能忽略你的指定,悄悄降级为COPY,而错误信息藏得极深。
- 硬指定后若实际走
COPY,INFO字段仍可能显示ALGORITHM=INPLACE(这是历史bug级行为,尤其在5.7早期版本) - 更可靠的做法是:不写
ALGORITHM,让MySQL自动选;执行完立刻看INFO字段,再结合SHOW PROCESSLIST观察是否有长时间Waiting for table metadata lock - 真正决定并发能力的是
LOCK子句:LOCK=NONE才表示读写都不阻塞;LOCK没指定时默认可能为SHARED甚至EXCLUSIVE,这点比算法类型更容易被忽略
最常被绕过的点是:INPLACE执行期间,只要有一个活跃事务没提交,它就会在提交阶段死等——这时候你看到的不是慢,而是“突然卡住几秒”,然后报错Lock wait timeout exceeded。查metadata_locks和innodb_trx才是定位这类问题的刚需动作。

















