UPDATE: Probeer de col-kolom NIET NULL te maken. Dat is de reden waarom het de index niet gebruikt. Als het niet nul is, is dit het 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
Als de optimizer bepaalt dat het efficiënter is om de index NIET te gebruiken (misschien vanwege het herschrijven van de query), dan zal dat niet zo zijn. Optimizer-hints zijn precies dat, namelijk hints om Oracle een index te vertellen die u leuk vindt het te gebruiken. Je kunt ze zien als suggesties. Maar als de optimizer bepaalt dat het beter is om de index niet te gebruiken (opnieuw, bijvoorbeeld als gevolg van het herschrijven van query's), dan doet hij dat niet.
Raadpleeg deze link:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Het specificeren van een van deze hints zorgt ervoor dat de optimizer het opgegeven toegangspad alleen kiest als het toegangspad beschikbaar is op basis van het bestaan van een index of cluster en op basis van de syntactische constructies van de SQL-instructie. Als een hint een niet-beschikbaar toegangspad specificeert, dan negeert de optimizer het."
Aangezien u een count(*)-bewerking uitvoert, heeft de optimizer vastgesteld dat het efficiënter is om gewoon de hele tabel en hash te scannen in plaats van uw index te gebruiken.
Hier is nog een handige link over hints:http://www.dba-oracle.com/t_hint_ignored. htm