Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分区表上的本地索引未被使用_Sql_Oracle_Indexing_Oracle10g_Partitioning - Fatal编程技术网

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

Sql 分区表上的本地索引未被使用,sql,oracle,indexing,oracle10g,partitioning,Sql,Oracle,Indexing,Oracle10g,Partitioning,我已经根据日期列按月划分了一个表。 我还将该表上的索引从全局移动到了本地 现在,, 一个用来从此表中选择数据的查询在对表进行分区和创建本地索引之前要进行索引范围扫描。但更改后,相同的查询将用于完整表扫描。 这里要提到的是,我在表的同一列上有索引和分区键 有人能提出可能的问题吗 查询: SELECT * FROM USER.LOAN_BORROW WHERE CALENDAR_DT = '25-SEP-2014' 变更前执行计划: OPERATION OPTIONS SELEC

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

现在,, 一个用来从此表中选择数据的查询在对表进行分区和创建本地索引之前要进行索引范围扫描。但更改后,相同的查询将用于完整表扫描。 这里要提到的是,我在表的同一列上有索引和分区键

有人能提出可能的问题吗

查询:

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

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

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

感谢您的即时投入。但是分区后的查询花费的时间是分区前的两倍。如果我使用索引提示强制使用索引,我可以在执行计划中看到使用索引的技术。你知道这个提示是否有助于缩短执行时间吗。(PS-代码仍未推送到更高的环境)