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