2014-09-30 55 views
1

我已经在日期列的每月基础上对表进行了分区。 我也纷纷上表中的索引从全球到地方分区表上的本地索引不被使用

现在, 查询是一直用它来选择数据从该表中的分区表和创建本地索引然后再前往索引范围扫描。但是相同的查询将在更改后进行全表扫描。 这里要提到的是,我在表的同一列有索引和分区键。

有人可以请建议可能是什么问题。

查询:

变化后
OPERATION   OPTIONS 
SELECT STATEMENT  
FILTER 
TABLE ACCESS  BY INDEX ROWID 
INDEX    RANGE SCAN 

高管计划:改变前

SELECT * FROM USER.LOAN_BORROW 
WHERE CALENDAR_DT = '25-SEP-2014' 

高管计划

​​3210

可能是什么原因,如果分区键与本地索引在表格的同一列上,那么数据栏需要更多时间?为什么它在这种情况下不使用本地索引?是否还有任何隐藏的内置索引与分配键一起使用,哪个oracle使用本地索引?

回答

1

它看起来像表是由同一列分区。在这种情况下,最好使用FILL SCAN扫描一个分区的所有行,而不是从一个索引分区读取每一行,然后通过rowid读取整个表格块。如果你有一些列的分区,通常你不需要索引它(除非你创建本地唯一的组合索引)。

+0

感谢您的即时输入。但分区后的查询是分割前的两倍。如果我使用索引提示强制使用索引,我可以在执行计划中看到chnage,它使用索引。任何想法,如果这个提示可能有助于减少执行时间。 (PS - 代码仍未被推送到更高的环境) – 2014-09-30 11:25:22

-1

我仍然在这个问题上请。

如果分区键和本地索引位于表的同一列,那么数据加载需要更多时间的原因是什么? 为什么它在这种情况下不使用本地索引? 是否有任何隐藏的内置索引与分区键一起使用,哪个oracle用来代替本地索引?

+0

您应该修改您的问题,而不是将问题添加为答案。它有助于保持组织的有序性,并且还会碰到问题并获得更多关注。 – 2014-10-06 17:58:50