假设我有一个带有自动递增代理键的表。
这是使用反向索引的好例子吗?
我的说法是否正确:
插入(插入索引)会更快..因为新值将随机插入,而不是总是插入最右边的叶子(不断强制重新平衡)。
索引查找会稍微慢一些..因为数据库必须花费(一点)时间来反转索引。
因为它是一个代理键..我真的不需要范围扫描能力(你不能使用反向索引来做到这一点)。
(注意,我没有使用 Oracle RAC)
一般来说,如果您不使用 RAC,则没有理由使用反向键索引。
从性能的角度来看,在任何给定时间点拥有一两个热块会更好,因为这基本上保证了热块将位于缓冲区高速缓存中,并且INSERT
不必承担从磁盘读取块的成本。如果您将插入插入到索引中的随机块中,那么您想要的块很有可能已经在缓存中老化,并会产生物理 I/O 的成本。
保持指数平衡的成本非常低,但即使这样也有利于标准指数。如果您有一个带有普通索引的序列生成主键,Oracle 将执行以下操作:90/10 块分割 http://hemantoracledba.blogspot.com/2009/05/index-block-splits-90-10.html当该块填满时,在最右边的块上。相反,如果您有反向键索引,Oracle 必须这样做50/50 块分割 http://hemantoracledba.blogspot.com/2011/02/index-block-splits-with-reverse-key.html每当给定的块填满时。 50/50 块分割将旧块的一半数据复制到新块,90/10 块分割仅将最右边的数据值复制到新块。因此,90/10 块分割比 50/50 块分割便宜得多,并且无论您选择哪种索引类型,您都需要进行大致相同数量的块分割。因此,即使忽略缓存的影响,维护常规索引的成本也低于维护反向键索引的成本。
您考虑使用反向键索引的原因是您正在使用 RAC,并且您希望避免许多 RAC 节点争夺同一个热块的成本。如果您经常需要将热块从一个节点运送到另一个节点才能进行下一次插入,则可能值得使用反向键索引来减少争用。如果您已获得分区选项的许可,那么最好还是使用散列分区索引(无论表是否分区都可以这样做)。如果您尚未获得分区选项的许可,则反向键索引可能足以解决热块上的争用,因此不需要您获得分区许可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)