Oracle索引行为

时间:2013-04-30 09:16:11

标签: sql oracle indexing oracle11g

当我在表格中查询这样的特定对象时,我会得到一个空的结果集:

SELECT 
   a, b, c, valid_to, pk_mykey, myobject
FROM
   myschema.mytable
WHERE
   valid_to = to_date('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
AND
   pk_mykey > 0
AND
   myobject = 'ABC.123';

但我知道记录必须在桌面上!

所以我使用这个查询,它会突然出现:

SELECT 
   /*+ NO_INDEX(mytable myindex) */
   a, b, c, valid_to, pk_mykey, myobject
FROM
   myschema.mytable
WHERE
   valid_to = to_date('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
AND
   pk_mykey > 0
AND
   myobject = 'ABC.123';

所以通过使用索引记录将不会显示,但没有索引它会?这怎么可能?我在这里错过了什么?我的表和/或索引有什么问题?知道如何解决这个问题吗?

(DBMS是Oracle 11g EE 11.2.0.2.0 64位)

2 个答案:

答案 0 :(得分:3)

您是否确认执行计划存在差异?

如果您在使用和不使用索引时获得不同的结果,那么我会考虑删除索引并重新创建它。不要只重建索引,因为新段将基于旧段中的数据,如果确实存在无法解决的腐败问题。

答案 1 :(得分:-1)

理论上,由于某些Oracle错误,索引的内容可能“无效”。这可能发生在一些早期RAC版本上。 尝试执行语句

ALTER TABLE myschema.mytable VALIDATE STRUCTURE CASCADE;

这将根据索引“交叉检查”表内容。或者尝试重建索引。