【发布时间】:2014-01-07 12:38:19
【问题描述】:
我有两个巨大的表,表 A 中有 1000 万行,表 B 中有 250 万行。两个表都有一个共同的字段 id。表 A 有约 250 列,表 B 有 5 列。表 B 中的所有 id 都存在于表 A 中。我想将表 A 中的字段(日期格式)添加到表 B。我有两个选项,并且都需要大量时间来运行。我想知道哪个会更有效率。
选项 1:alter table B add column field date;update B join A using(id) set a.field=b.field;
选项 2:create table C as select a.*,b.field from B join A using(id);
id 在两个表中都有索引,ENGINE 是 MyISAM。
哪个选项会更快?
我认为 2 因为在选项 1 中,添加一列需要时间,然后在更新时,状态 copy to tmp table 需要大量时间。在选项 1 中,它立即以“发送数据”状态开始。我说的对吗?
另外,我可以用其他更快的方法吗?
【问题讨论】:
-
方案2会更适合这种场景。
-
我想我错过了一些东西......但是,你想将日期列从 A 移动到 B 吗?如果是这样,我可以问你为什么要这样做吗?
-
@Melon 对于 B 中的 id,我需要从 A 获取字段(日期格式)。我只需要 B 中的 id,我将把它放入 csv 中其他目的。
-
我认为您已经放弃了查看选项:
CREATE VIEW 'my_view' as select * from B join A on B.id = A.id;,所以您可以运行:select field,any_field from my_view。如果“字段”适合更改,并且将其复制到数据库中,则这是一个不好的选择。 (除非触发以保持更新)
标签: mysql sql database sql-update alter-table