2017-10-12 35 views
0

我创建了一个表,按年度划分,我有以下两个本地非唯一在表上创建索引Oracle分区和地方Indexex(12C)

IDX1:(年,周,PD,SKU) IDX2:(SKU,STR)

我undersatnding是IDX2是多余的,你可以只创建一个 与指数(年,周,PD,SKU,STR)采取跳跃扫描adavantage。 有什么想法或意见?

+0

平均每年每周会有多少个“pd”值? –

+0

没有太多..说约13 – sria

+0

这是很多,每周。这意味着,即使给了一年和一个SKU,“INDEX SKIP SCAN”也需要做676个指标探测。仍然可能比“全扫描”更好,但我更愿意在IDX2上进行范围扫描。 –

回答

0

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

0

假设你有一个查询指定只skustr,然后idx2冗余。

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

INDEX SKIP SCAN on idx1将做52+指数探针。 idx2上的INDEX RANGE SCAN将针对每个分区进行一次探测(您可以通过创建全局索引来减少1个探测)。

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