我有一个包含大约1亿行数据的表。我需要根据另一个表中的某些值更新此表的某些列(大约50个)。 它只有一个主键列。没有其他限制。
类似这样的事情
UPDATE
Table_A
SET
Table_A.col1 = Table_B.col1,
Table_A.col2 = Table_B.col2
FROM
Some_Table AS Table_A
INNER JOIN Other_Table AS Table_B
ON Table_A.id = Table_B.id
WHERE
Table_A.col3 = 'cool'
我需要在几分钟内完成处理。 普通数据库是出于此目的还是应该用于内存数据库。
有没有比这个单一更新声明更好的方法?
答案 0 :(得分:0)
答案取决于桌子上的索引。您在更新的列上定义的索引越多,更新的执行速度就越慢。使用加入2个表所需的索引和select语句的where子句进行Balace。仍然... 30分钟更新50条记录听起来很重
答案 1 :(得分:0)
对于Vertica 展平表方法,这看起来是一个非常有趣的用例。
我建议你阅读上面的Vertica文档。
可以说你可以:
ALTER TRABLE table_a ALTER COLUMN col1
DEFAULT (SELECT col1 FROM table_b WHERE table_b.id=table_a.id);
(或者,如果该列已包含数据,请先将其删除,然后使用该默认值重新添加)。
我已经获得了不错的性能结果。值得一试,我想......