Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego w tym zapytaniu nie jest używany indeks?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd wstawiania Oracle:niepoprawny miesiąc

  2. Problem z parametrem ODP .NET z typem danych uint

  3. Błąd (2,7):PLS-00428:oczekiwana jest klauzula INTO w tej instrukcji SELECT

  4. Dzielenie ciągu oddzielonego przecinkami w Oracle nie działa

  5. Wywołaj program Java z wyzwalacza bazy danych Oracle