0

我创建了一个按年份分区的表,并且在表上创建了以下两个本地非唯一索引

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

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

4

2 回答 2

0

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

于 2017-10-12T20:19:36.593 回答
0

假设您有一个仅指定skuand的查询str,则idx2不是多余的。

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

一个INDEX SKIP SCANonidx1将执行 52+ 索引探测。对每个分区进行一次探测INDEX RANGE SCANidx2意愿(您可以通过将其设为全局索引将其减少到 1 个整体探测)。

所以,idx2提供好处。这些好处是否证明表上第二个索引的成本是合理的,取决于您的使用模式(写入与读取)和性能目标。

于 2017-10-12T20:16:19.373 回答