我创建了一个表,按年度划分,我有以下两个本地非唯一在表上创建索引Oracle分区和地方Indexex(12C)
IDX1:(年,周,PD,SKU) IDX2:(SKU,STR)
我undersatnding是IDX2是多余的,你可以只创建一个 与指数(年,周,PD,SKU,STR)采取跳跃扫描adavantage。 有什么想法或意见?
我创建了一个表,按年度划分,我有以下两个本地非唯一在表上创建索引Oracle分区和地方Indexex(12C)
IDX1:(年,周,PD,SKU) IDX2:(SKU,STR)
我undersatnding是IDX2是多余的,你可以只创建一个 与指数(年,周,PD,SKU,STR)采取跳跃扫描adavantage。 有什么想法或意见?
索引分区键是多余的,因为分区修剪将有效地“索引”该字段,并且修剪发生在任何索引读取之前。在这一点上,跳过扫描将正常运行,假设优化器未对高于完整分区扫描的跳过扫描进行评分。
假设你有一个查询指定只sku
和str
,然后idx2
是不冗余。
使用idx1
,您至少还有52周x? (不知道pd
是什么......)= 52个或更多的索引子树为INDEX SKIP SCAN
要查看,每个分区。
INDEX SKIP SCAN
on idx1
将做52+指数探针。 idx2
上的INDEX RANGE SCAN
将针对每个分区进行一次探测(您可以通过创建全局索引来减少1个探测)。
因此,idx2
提供了好处。这些好处是否证明表中第二个索引的成本取决于您的使用模式(写入vs读取)和性能目标。
平均每年每周会有多少个“pd”值? –
没有太多..说约13 – sria
这是很多,每周。这意味着,即使给了一年和一个SKU,“INDEX SKIP SCAN”也需要做676个指标探测。仍然可能比“全扫描”更好,但我更愿意在IDX2上进行范围扫描。 –