我有一个大表(大约1000万条记录),其中包含几个键到其他较小的表中。键在每个较小的表中都是唯一的,但在大表中则不是。我想根据键匹配从一个较小的表中向大表中添加一列,但我不确定“正确”的方法。我有一个有效的解决方案,但它需要相当长的时间(认为这可能是不可避免的),并且通常不会觉得这是最佳的方式。这就是我所拥有的:
CREATE TABLE new_big_table LIKE big_table;
ALTER TABLE new_big_table ADD(new_column TINYINT NOT NULL);
INSERT INTO new_big_table SELECT big_table.*, smaller_table.my_column
FROM big_table JOIN smaller_table ON big_table.key1 = smaller_table.key1
AND big_table.key2 = smaller_table.key2;
这可以完成工作,但它真的闻起来像我做错了。似乎至少我不需要创建表的副本来完成这项工作。有没有更直接(更有效?)的方式呢?
值得一提的是,这是针对家中的个人爱好项目,所以我可以自由地占用机器的所有资源(因为我是唯一一个使用它的人)。因此,如果有任何直接的性能调整提示来做这样的事情,我会很感激他们(我在Amazon EC2实例上试验这个,因为它应该比我的个人桌面更快,内存更多)
答案 0 :(得分:5)
您是否尝试过就地添加列?
alter table big_table add new_column tinyint;
update big_table bt
join smaller_table st
on bt.key1 = st.key1
and bt.key2 = st.key2
set bt.new_column = st.my_column;
alter table big_table modify new_column tinyint not null;