【发布时间】:2023-04-01 03:00:01
【问题描述】:
我有一张包含很多记录的表(可能超过 500 000 或 1 000 000)。我在此表中添加了一个新列,我需要使用此表中另一列的相应行值为该列中的每一行填充一个值。
我尝试使用单独的事务来选择每下一个 100 条记录块并更新它们的值,但是更新 Oracle10 中的所有记录仍然需要数小时。
在不使用某些特定方言的功能的情况下,在 SQL 中执行此操作的最有效方法是什么,因此它适用于任何地方(Oracle、MSSQL、MySQL、PostGre 等)?
附加信息:没有计算字段。有索引。使用生成的 SQL 语句逐行更新表。
【问题讨论】:
-
如果
INDEXes 出现在更新/插入的列中,很少有人会走到极端,让夜间工作对其进行分析。 -
我们需要更多信息。告诉我们有关表架构的信息......任何“计算”列?有什么索引吗? 500k - 1m 行无论如何都不是很多记录。
-
感谢大家的快速响应。我跳过了我使用生成的 SQL 语句的部分。现在我深入研究了它,它看起来像生成的 SQL 逐行更新!因此,任何将 100 条记录分开的尝试都是毫无意义的……我将更改代码以生成正确的 SQL UPDATE 语句,如已接受的答案所示。
标签: sql performance oracle