BaseBallBatBoy
Erfahrenes Mitglied
Hallo
Heute habe ich etwas seltsames entdeckt. Gegeben sei folgende Tabelle:
PK, OBJ, FK
========
1, x, 10
2, x, 20
3, x, 30
4, x, -1
Auf OBJ gibt es einen Index.
Wenn ich nun folgende Query absetze, erhalte ich nur die PKs 1-3!
Wenn ich aber den Optimizer zwinge, den Index nicht zu verwenden, erhalte ich alle 4 Records!
Das bringt mich zu der Aussage, dass der Index korrupt ist. Seht ihr das auch so?
Nun habe ich auch eine nachgelagerte Prozedur, die ein Update auf diese Tabelle ausführt (UPDATE mytable WHERE obj = 'x' AND FK = -1). Sehe ich das richtig, dass dieser Update genau nichts bewirkt, weil er den Index verwendet und folglich den entsprechenden Eintrag gar nicht findet?
Gruss
Heute habe ich etwas seltsames entdeckt. Gegeben sei folgende Tabelle:
PK, OBJ, FK
========
1, x, 10
2, x, 20
3, x, 30
4, x, -1
Auf OBJ gibt es einen Index.
Wenn ich nun folgende Query absetze, erhalte ich nur die PKs 1-3!
SQL:
SELECT
*
FROM
mytable
WHERE
obj = 'x'
Wenn ich aber den Optimizer zwinge, den Index nicht zu verwenden, erhalte ich alle 4 Records!
SQL:
SELECT /*+ FULL(mytable) */
*
FROM
mytable
WHERE
obj = 'x'
Das bringt mich zu der Aussage, dass der Index korrupt ist. Seht ihr das auch so?
Nun habe ich auch eine nachgelagerte Prozedur, die ein Update auf diese Tabelle ausführt (UPDATE mytable WHERE obj = 'x' AND FK = -1). Sehe ich das richtig, dass dieser Update genau nichts bewirkt, weil er den Index verwendet und folglich den entsprechenden Eintrag gar nicht findet?
Gruss
Zuletzt bearbeitet von einem Moderator: