更新数据库表的最快方法
Posted
技术标签:
【中文标题】更新数据库表的最快方法【英文标题】:Fastest way to update database table 【发布时间】:2017-11-07 05:43:06 【问题描述】:我有一个包含大约 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'
我需要在几分钟内完成处理。 普通数据库是否可以达到目的,或者我应该使用内存数据库。
有没有比这个更新语句更好的方法?
【问题讨论】:
【参考方案1】:答案取决于表中的索引位置。您在要更新的列上定义的索引越多,更新执行的速度就越慢。将此与连接 2 个表所需的索引和 select 语句的 where 子句相平衡。仍然... 30 分钟更新 50 条记录听起来很沉重
【讨论】:
我只有一个主键,没有创建索引。 50 条记录,还是 50 列影响 1 亿条记录? 它的 50 列可能会受到影响【参考方案2】:这看起来是 Vertica 扁平化表格方法的一个非常有趣的用例。
我建议您阅读有关它的 Vertica 文档。
可以这么说:
ALTER TRABLE table_a ALTER COLUMN col1
DEFAULT (SELECT col1 FROM table_b WHERE table_b.id=table_a.id);
(或者,如果该列已包含数据,请先将其删除,然后使用该默认值重新添加)。
我已经获得了相当不错的性能结果。值得一试,我认为....
【讨论】:
以上是关于更新数据库表的最快方法的主要内容,如果未能解决你的问题,请参考以下文章