Oracle数据存储—块



如果一行被迁移(或链接),它的ROWID不会改变以反映新块。为什么保留旧的rowid是一种优势,即使它指向一个块,而该行已经不在那里了?

Tom Kyte几年前就回答了这个问题。

请参阅:https://asktom.oracle.com/pls/apex/asktom.search?tag=row-迁移

他将原因描述为两个方面:

  • Oracle希望在尽可能多的情况下保持rowid不变,这样它就不会意外更改并破坏依赖它的工具。

  • 偶尔花费额外的I/O来跟踪转发rowid比在迁移时"更新大量索引数据"更有效。

就我个人而言,第二个原因对我来说毫无意义。目前尚不清楚为什么维护索引需要删除原始条目(如DELETE语句中所发生的)和添加新条目(如在INSERT语句中所出现的)。是的,这是更多的工作,但如果你没有查询足够的数据来证明额外的工作,你就不会有索引。

我相信第一个原因。Oracle似乎确实尽可能保持rowids不变。我不知道这是否有根本原因,或者只是因为他们的一些工具(例如Oracle Forms)依赖它

相关内容

  • 没有找到相关文章