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 に答える