Oracle 分区和本地 Indexex (12c)

Oracle partitioning and local Indexex (12c)

我创建了一个按年份分区的 table,并且在 table

上创建了以下两个本地非唯一索引

idx1 : (年, 周, pd, sku) idx2 : (sku, str )

我的理解是 idx2 是多余的,您可以创建 一个索引 (year,wk, pd, sku, str) 以利用跳过扫描。 有什么想法或意见吗?

假设您有一个仅指定 skustr 的查询,那么 idx2 不是 多余的。

使用 idx1,您还有至少 52 周 x ?? (不知道 pd 是什么...)= 52 个或更多索引子树供 INDEX SKIP SCAN 浏览,每个分区 .

idx1 上的 INDEX SKIP SCAN 将执行 52+ 索引探测。 idx2 上的 INDEX RANGE SCAN 将对每个分区进行一次探测(您可以通过将其设为全局索引来将其减少到 1 个整体探测)。

因此,idx2 提供了好处。这些好处是否值得 table 上的第二个索引的成本取决于您的使用模式(写入与读取)和性能目标。

索引分区键是多余的,因为分区修剪将有效地 "index" 该字段,并且修剪发生在任何索引读取之前。在这一点上,跳过扫描将正常运行,假设优化器没有对跳过扫描评分高于完整分区扫描。