【问题标题】:Oracle UPDATE /*+append*/ ROW MOVEMENTOracle UPDATE /*+append*/ 行移动
【发布时间】:2020-01-09 09:09:33
【问题描述】:

我有一个根据 Oracle 18 中的 valid_to_date 分区的表。已启用行移动。

更新 valid_to_date 列,以便它从一个分区移动到另一个分区。 我想,Oracle 在内部会在一个分区中执行 DELETE 并在另一个分区中执行 INSERT。

它是不是像普通的 INSERTINSERT /* +append */

因为我知道 /* + append */ 更有效率...

【问题讨论】:

  • 你必须问Oracle这个问题,因为你问的是内部代码是如何工作的。你试过测试吗?插入追加也不一定有效,因为(例如)通过将行添加到高水位线之上,它并没有充分利用原本可用的空间,因此在空间方面效率不高.
  • 我的意思是效率,而不是空间。
  • 如果我在没有附加提示的情况下插入压缩分区,它不会压缩?

标签: oracle sql-update append


【解决方案1】:

行移动不使用追加提示,不,除非您更新很多行,否则它并不比简单的插入更有效。不能使用它的一个简单原因是,在这样的插入之后,除非您提交/回滚,否则您无法使用该表。因此,如果 Oracle 在后台执行 APPEND,它可能会破坏您的代码。

【讨论】:

    【解决方案2】:

    它在运行时必然会消耗你机器上的处理资源(它会读取表,它会删除/插入表底部的行以将它们向上移动,它会生成重做,它会生成撤消)。

    see Asktom post

    “在表格底部插入行”子句很可能意味着使用附加提示

    【讨论】:

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