1

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

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 64bit)

4

2 回答 2

3

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

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

于 2013-04-30T09:22:14.910 回答
-1

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

ALTER TABLE myschema.mytable VALIDATE STRUCTURE CASCADE;

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

于 2013-04-30T09:44:04.473 回答