您可以通过暂时关闭唯一检查和外键检查来加快该过程。您还可以更改使用的算法。
如果您希望新列位于表的末尾,那么您应该使用algorithm=instant
:
SET unique_checks = 0;
SET foreign_key_checks = 0;
ALTER TABLE main_table ADD location varchar(256), algorithm=instant;
SET unique_checks = 1;
SET foreign_key_checks = 1;
否则,如果您需要列位于特定位置,请使用algorithm=inplace
:
SET unique_checks = 0;
SET foreign_key_checks = 0;
ALTER TABLE main_table ADD location varchar(256) AFTER othercolumn, algorithm=inplace;
SET unique_checks = 1;
SET foreign_key_checks = 1;
作为参考,我的 PC 使用就地算法更改了一个包含 2000 万行的表大约需要 2 分钟。如果您使用的是 Workbench 之类的程序,那么您可能希望在开始操作之前增加设置中的默认超时时间。
如果您发现该操作无限期挂起,那么您可能需要查看进程列表并终止任何在表上锁定的进程。您可以使用以下命令执行此操作:
SHOW FULL PROCESSLIST;
KILL PROCESS_NUMBER_GOES_HERE;