我想实现以下使用以下命令将列添加到现有表:
ALTER TABLE foo ADD COLUMN bar AFTER COLUMN old_column;
与没有 AFTER COLUMN
选项的相同命令相比,此选项所花费的时间是否会显着延长,如下所示?
ALTER TABLE foo ADD COLUMN bar;
第一个命令会在执行过程中使用更多的 tmp table 空间来执行操作吗?
上下文:我有一个非常大的表(考虑超过十亿行),我想使用 AFTER COLUMN
选项添加一个额外的列,但我不想受到太多惩罚.
最佳答案
我会这样做:
CREATE TABLE newtable LIKE oldtable;
ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED NOT NULL DEFAULT 0;
我不知道您的专栏的类型。我举一个INT的例子。现在,您可以在此处指定要添加此新列的位置。默认情况下,除非您指定 AFTER 关键字,否则它将在末尾添加它,如果您提供它,则必须按照插入顺序指定,否则您需要将其放在末尾。
INSERT INTO newtable SELECT field1, field2, field3 /*etc...*/, newcolumn = 0 FROM oldtable;
或者,如果您在列之间添加它:
# eg: ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED NULL AFTER field2;
INSERT INTO newtable SELECT field1, field2, newcolumn = 0, field3 /*etc...*/ FROM oldtable;
如果要批量执行,可以添加 where 子句。
一旦所有记录都在那里
DROP TABLE oldtable;
RENAME TABLE newtable to oldtable;
关于mysql - MySQL `ALTER TABLE ADD COLUMN AFTER COLUMN` 的性能 - 在大表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190228/