【发布时间】:2011-11-18 23:04:18
【问题描述】:
我想实现以下使用以下命令向现有表添加列:
ALTER TABLE foo ADD COLUMN bar AFTER COLUMN old_column;
与没有 AFTER COLUMN 选项的相同命令相比,此选项所花费的时间是否会显着延长,如下所示?
ALTER TABLE foo ADD COLUMN bar;
第一个命令会在执行过程中使用更多的 tmp 表空间来执行操作吗?
上下文:我有一个非常大的表(考虑超过十亿行),我想使用 AFTER COLUMN 选项添加一个额外的列,但我不想受到太多惩罚。
【问题讨论】:
-
表格是否经常读取?是合并表吗?
-
这是一张普通的桌子。读取数据没有问题。
-
这个表在很多mysql程序中使用吗? php代码? (或其他代码)?
-
您将获得更多的 CPU 使用率,因为必须转移记录。从内存使用的角度来看 - 它与 AFTER COLUMN 选项相同,没有它。在大多数情况下,会创建一个 tmp 表。有些 MySQL 引擎支持热模式更改(TokuDB 就是其中之一),它们不会创建 tmp 表并浪费大量资源。但是,如果您使用 MyISAM 或 InnoDB 执行此操作 - 我会说“AFTER COLUMN”选项会由于记录移位而花费更多时间。
-
@Drew ;在极少数情况下,您添加新列的位置有时会影响此类命令完成所需的时间。但是..
Does it use a different amount of (or any for that matter) tmp table space to perform the action?,您是否会碰巧使用@BookOfZeus 提供的方法?
标签: mysql