Oracle 分区和本地 Indexex (12c)
Oracle partitioning and local Indexex (12c)
我创建了一个按年份分区的 table,并且在 table
上创建了以下两个本地非唯一索引
idx1 : (年, 周, pd, sku)
idx2 : (sku, str )
我的理解是 idx2 是多余的,您可以创建
一个索引 (year,wk, pd, sku, str) 以利用跳过扫描。
有什么想法或意见吗?
假设您有一个仅指定 sku
和 str
的查询,那么 idx2
不是 多余的。
使用 idx1
,您还有至少 52 周 x ?? (不知道 pd
是什么...)= 52 个或更多索引子树供 INDEX SKIP SCAN
浏览,每个分区 .
idx1
上的 INDEX SKIP SCAN
将执行 52+ 索引探测。 idx2
上的 INDEX RANGE SCAN
将对每个分区进行一次探测(您可以通过将其设为全局索引来将其减少到 1 个整体探测)。
因此,idx2
提供了好处。这些好处是否值得 table 上的第二个索引的成本取决于您的使用模式(写入与读取)和性能目标。
索引分区键是多余的,因为分区修剪将有效地 "index" 该字段,并且修剪发生在任何索引读取之前。在这一点上,跳过扫描将正常运行,假设优化器没有对跳过扫描评分高于完整分区扫描。
我创建了一个按年份分区的 table,并且在 table
上创建了以下两个本地非唯一索引idx1 : (年, 周, pd, sku) idx2 : (sku, str )
我的理解是 idx2 是多余的,您可以创建 一个索引 (year,wk, pd, sku, str) 以利用跳过扫描。 有什么想法或意见吗?
假设您有一个仅指定 sku
和 str
的查询,那么 idx2
不是 多余的。
使用 idx1
,您还有至少 52 周 x ?? (不知道 pd
是什么...)= 52 个或更多索引子树供 INDEX SKIP SCAN
浏览,每个分区 .
idx1
上的 INDEX SKIP SCAN
将执行 52+ 索引探测。 idx2
上的 INDEX RANGE SCAN
将对每个分区进行一次探测(您可以通过将其设为全局索引来将其减少到 1 个整体探测)。
因此,idx2
提供了好处。这些好处是否值得 table 上的第二个索引的成本取决于您的使用模式(写入与读取)和性能目标。
索引分区键是多余的,因为分区修剪将有效地 "index" 该字段,并且修剪发生在任何索引读取之前。在这一点上,跳过扫描将正常运行,假设优化器没有对跳过扫描评分高于完整分区扫描。