AKTUALIZACJA: Spróbuj ustawić kolumnę col NOT NULL. To jest powód, dla którego nie używa indeksu. Jeśli nie jest zerowy, oto 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
Jeśli optymalizator ustali, że bardziej efektywne jest NIE używać indeksu (być może z powodu przepisania zapytania), to nie zrobi tego. Podpowiedzi Optymalizatora to tylko wskazówki, jak wskazać Oracle indeks, który chcesz go używać. Możesz myśleć o nich jako o sugestiach. Ale jeśli optymalizator stwierdzi, że lepiej nie używać indeksu (ponownie, na przykład w wyniku przepisania zapytania), to nie zrobi tego.
Skorzystaj z tego linku:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm „Określenie jednej z tych wskazówek powoduje, że optymalizator wybiera określoną ścieżkę dostępu tylko wtedy, gdy ścieżka dostępu jest dostępna na podstawie istnienia indeksu lub klastra oraz konstrukcji składniowych instrukcji SQL. Jeśli wskazówka określa niedostępną ścieżkę dostępu, wtedy optymalizator go ignoruje."
Ponieważ wykonujesz operację count(*), optymalizator ustalił, że bardziej wydajne jest skanowanie całej tabeli i haszowanie zamiast używania indeksu.
Oto kolejny przydatny link ze wskazówkami:http://www.dba-oracle.com/t_hint_ignored. htm