如果行被迁移(或链接),它的rowid不会改变以反映新的block.Why。保留旧的ROWID是否有好处,即使它指向一个块,该行不再驻留在其中?
发布于 2017-10-23 20:28:47
Tom Kyte几年前就回答了这个问题。
请参阅:https://asktom.oracle.com/pls/apex/asktom.search?tag=row-migration
他将原因描述为两方面:
rowid常量,以便它不会意外更改并破坏依赖它的工具。rowid比在迁移发生时“更新大量索引数据”效率更高。就我个人而言,第二个原因对我来说从来都没有意义。不清楚为什么维护索引需要的不仅仅是删除原始条目(在DELETE语句中会发生)和添加新条目(在INSERT中会发生)语句。是的,这是更多的工作,但如果您没有查询足够的数据来证明额外的工作是合理的,那么您一开始就不会有索引。
不过,我相信第一个原因。甲骨文似乎确实试图在可能的情况下保持rowids的不可变性。我不知道这是不是有根本的原因,或者只是因为他们的一些工具(例如Oracle Forms)依赖于它。
https://stackoverflow.com/questions/46884768
复制相似问题