AKTUALISIERUNG: Versuchen Sie, die col-Spalte NICHT NULL zu machen. Das ist der Grund, warum es den Index nicht verwendet. Wenn es nicht null ist, hier ist der Plan.
SELECT STATEMENT, GOAL = ALL_ROWS 69 10 30
HASH GROUP BY 69 10 30
INDEX FAST FULL SCAN SANDBOX TEST_INDEX 56 98072 294216
Wenn der Optimierer feststellt, dass es effizienter ist, den Index NICHT zu verwenden (möglicherweise aufgrund des Umschreibens der Abfrage), wird er dies nicht tun. Optimierer-Hinweise sind genau das, nämlich Hinweise, um Oracle einen Index mitzuteilen, den Sie mögen es zu verwenden. Sie können sie als Vorschläge betrachten. Aber wenn der Optimierer feststellt, dass es besser ist, den Index nicht zu verwenden (wieder zum Beispiel als Ergebnis einer Abfrageumschreibung), dann wird er es nicht tun.
Siehe diesen Link:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Die Angabe eines dieser Hinweise bewirkt, dass der Optimierer den angegebenen Zugriffspfad nur dann wählt, wenn der Zugriffspfad basierend auf der Existenz eines Index oder Clusters und auf den syntaktischen Konstrukten der SQL-Anweisung verfügbar ist. Wenn ein Hinweis einen nicht verfügbaren Zugriffspfad angibt, dann ignoriert es der Optimierer."
Da Sie eine count(*)-Operation ausführen, hat der Optimierer festgestellt, dass es effizienter ist, einfach die gesamte Tabelle und den Hash zu scannen, anstatt Ihren Index zu verwenden.
Hier ist ein weiterer praktischer Link zu Hinweisen:http://www.dba-oracle.com/t_hint_ignored. htm