АКТУАЛИЗАЦИЯ: Опитайте да направите колоната col NOT NULL. Това е причината да не използва индекса. Когато не е нула, ето го планът.
SELECT STATEMENT, GOAL = ALL_ROWS 69 10 30
HASH GROUP BY 69 10 30
INDEX FAST FULL SCAN SANDBOX TEST_INDEX 56 98072 294216
Ако оптимизаторът определи, че е по-ефективно да НЕ се използва индексът (може би поради пренаписване на заявката), тогава няма да го направи. Съветите за оптимизатор са точно това, а именно съвети, за да кажете на Oracle индекс, който бихте харесали да го използвам. Можете да мислите за тях като за предложения. Но ако оптимизаторът реши, че е по-добре да не се използва индексът (отново в резултат на пренаписване на заявка например), тогава няма да го направи.
Вижте тази връзка:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Определянето на една от тези подсказки кара оптимизатора да избере посочения път за достъп само ако пътят за достъп е наличен въз основа на съществуването на индекс или клъстер и на синтактичните конструкции на SQL оператора. Ако подсказката указва неналичен път за достъп, тогава оптимизаторът го игнорира."
Тъй като изпълнявате операция count(*), оптимизаторът е преценил, че е по-ефективно просто да сканирате цялата таблица и хеш, вместо да използвате вашия индекс.
Ето още една удобна връзка за подсказки:http://www.dba-oracle.com/t_hint_ignored. htm