1

我是甲骨文的新手。不过,我已经使用 Microsoft SQL Server 多年。我被带入了一个已经逾期且超出预算的项目,我需要成为“Oracle 专家”。我有一张有 1400 万行的表。而且我有一个更新表的复杂查询。但我将从简单的查询开始。当我发布一个修改少量记录(100 到 10,000 左右)的简单更新时,表扫描表并更新受影响的记录需要不超过 2 到 5 分钟。(如果查询可以使用索引,时间会更短。)但是如果我更新整个表:

UPDATE MyTable SET MyFlag = 1;

然后需要3个小时!

如果表扫描在几分钟内完成,为什么要花几个小时?我当然可以就如何解决这个问题提出一些建议,因为我没有足够的 Oracle 经验来知道要运行哪些诊断查询。(我在 Oracle 11g 上并使用 Oracle SQL Developer 作为客户端。)

谢谢。

4

1 回答 1

4

当您UPDATE在 Oracle 中执行此操作时,您正在修改的数据会按顺序附加到重做日志中,然后通过一个名为CHECKPOINT.

此外,将旧版本的数据复制到UNDO空间中,以支持可能的事务回滚和并发进程对旧版本数据的访问。

这一切都可能比不修改数据的纯读取操作花费更多的时间。

于 2013-04-03T19:18:08.360 回答