ALTER TABLE ADD COLUMN需要很长时间

我只是想在数据库的一个表(main_table)中添加一个名为“location”的列。我运行的命令是

ALTER TABLE main\u TABLE ADD COLUMN location varchar(256);

主_表包含>2000000行。它持续运行超过2小时,但仍未完成

我尝试使用mytop
监视此数据库的活动,以确保查询未被其他查询进程锁定,但似乎未被锁定。要花那么长时间吗?实际上,我只是在运行这个命令之前重新启动了机器。现在该命令仍在运行。我不知道该怎么办

您的altertable语句意味着mysql必须重新写入表中的每一行,包括新列。由于您有超过200万行,我肯定会认为这需要大量的时间,在此期间,您的服务器可能大部分都是IO绑定的。您通常会发现执行以下操作更有效:

创建与主表类似的新表main\u TABLE\u;
ALTER TABLE main_TABLE_新添加列位置VARCHAR(256);
在主表中插入新的SELECT*,主表中为空;
将表main_TABLE重命名为main_TABLE_old,将main_TABLE_new重命名为main_TABLE;
放下主桌(旧桌);;

通过这种方式,您可以在空表上添加列,并基本上在新表中写入数据,如果不锁定那么多资源,您肯定没有其他人会看到这些数据

发表评论