0

我正在阅读“索引争用”并找到以下解释:

Oracle b-tree 索引是“右手”的,b-tree 的右手叶包含最低树级别中的最高键。

当基于用户生成的键(即序列)插入行时会发生索引叶节点争用,并且由于序列键始终是高阶键,因此低级索引树节点的每个插入都必须向上传播到高键b-tree 索引中的指标。

oracle b-tree索引是右手的还有其他缺点吗?

索引争用/插入争用的其他原因可能是什么?

4

2 回答 2

2

索引连续生成的 pk 时可能会发生索引争用或热点。在这种情况下,所有新记录总是插入到索引的最右边的叶子上,从而导致闩锁。

为了避免这个问题,oracle 引入了反向密钥选项。在反向键中,索引条目被反向保存(简单地说 - 123 将存储为 321)并且新插入的将分布在索引中。

一般来说,每次在同一个叶子块中插入大量数据时,都会出现热点。

重要通知 - 使用反向键索引时,您将无法使用范围扫描,因此请权衡您的选择。

于 2013-11-18T13:17:49.157 回答
0

我的问题专门针对 oracle b-tree 索引,而不是关于“索引争用”实际上是什么。虽然想在我的问题上再补充几点并因此回答它。

当基于用户生成的键(即序列)插入行时会发生索引叶节点争用,并且由于序列键始终是高阶键,因此低级索引树节点的每个插入都必须向上传播到高键b-tree 索引中的指标。

可使用三种技术来缓解此索引争用问题:

  • 反向键索引
  • 带有 cache 和 noorder 选项的序列
  • 使用散列分区全局索引
  • 调整索引块大小
于 2013-11-18T14:46:38.217 回答