当我在表格中查询这样的特定对象时,我会得到一个空的结果集:
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位)
答案 0 :(得分:3)
您是否确认执行计划存在差异?
如果您在使用和不使用索引时获得不同的结果,那么我会考虑删除索引并重新创建它。不要只重建索引,因为新段将基于旧段中的数据,如果确实存在无法解决的腐败问题。
答案 1 :(得分:-1)
理论上,由于某些Oracle错误,索引的内容可能“无效”。这可能发生在一些早期RAC版本上。 尝试执行语句
ALTER TABLE myschema.mytable VALIDATE STRUCTURE CASCADE;
这将根据索引“交叉检查”表内容。或者尝试重建索引。