更新数据库表的最快方法

时间:2017-11-07 05:43:07

标签: sql query-performance vertica

我有一个包含大约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'

我需要在几分钟内完成处理。 普通数据库是出于此目的还是应该用于内存数据库。

有没有比这个单一更新声明更好的方法?

2 个答案:

答案 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);

(或者,如果该列已包含数据,请先将其删除,然后使用该默认值重新添加)。

我已经获得了不错的性能结果。值得一试,我想......