分区表上的本地索引未被使用

时间:2014-09-30 10:38:02

标签: sql oracle indexing oracle10g partitioning

我已经在日期列上按月分区了一个表。 我还将该表上的索引从全局移动到本地

现在, 在分区表和创建本地索引之前,用于从该表中选择数据的查询将用于索引范围扫描。但是在更改后,相同的查询将用于全表扫描。 在这里提一下,我在表的同一列上有索引和分区键。

有人可以建议可能出现的问题。

查询:

SELECT * FROM USER.LOAN_BORROW 
WHERE CALENDAR_DT = '25-SEP-2014'
变更前的执行计划:

OPERATION         OPTIONS
SELECT STATEMENT    
FILTER  
TABLE ACCESS      BY INDEX ROWID
INDEX              RANGE SCAN
变更后的执行计划:

OPERATION          OPTIONS
SELECT STATEMENT    
FILTER  
PARTITION RANGE     SINGLE
TABLE ACCESS         FULL

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

1 个答案:

答案 0 :(得分:1)

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