更新数据库表的最快方法

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

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

我已经获得了相当不错的性能结果。值得一试,我认为....

【讨论】:

以上是关于更新数据库表的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 执行 UPDATE 的最快方法

asp.net - 管理数据库表的 Web 前端 - 添加、删除、更新

在 Django 中更新查询集中的一堆记录的最快方法

C# 反射:更新属性值的最快方法?

MongoDB - 更新集合中所有记录的最快方法是啥?

有没有最快的方法来更新 edmx?