ALTER TABLE app_member_ext
ADD INDEX idx_uid (uid),
ALGORITHM=INPLACE, LOCK=NONE;
对于InnoDB引擎的普通索引:
ALGORITHM=INPLACE:不会全表复制,只修改元数据和填充索引页LOCK=NONE:允许并发读写,不会阻塞DML操作- 结论:可以在线执行,不会导致业务中断
注意. 主键索引不支持
如何安全的重命名 表
RENAME TABLE
table1 TO table1_backup_20260509,
table1_copy1 TO table1;
假设有 table1_copy1 完全复制 table1 结构和数据
先将 table1 改为 table1_backup_20260509
然后将 table1_copy1 重命名为 table1 完成。
原子性:MySQL 会锁住字典,确保在重命名期间不会有新的查询进来。当语句执行完毕,所有后续的查询都会指向新的表(即原来的 copy1)。
回滚简单:如果新表有问题,你可以马上执行反向操作,把名字换回来,数据零损失。