【问题标题】: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'

我需要在几分钟内完成处理。 普通数据库是否可以达到目的,或者我应该使用内存数据库。

有没有比这个更新语句更好的方法?

【问题讨论】:

    标签: sql query-performance vertica


    【解决方案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);
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多