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

Jak wybrać i zoptymalizować indeksy oracle?

Dokumentacja Oracle zawiera doskonały zestaw kwestii dotyczących opcji indeksowania:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Aktualizacja dla 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D

Cytując:

  • Rozważ indeksowanie kluczy, które są często używane w klauzulach WHERE.

  • Rozważ indeksowanie kluczy, które są często używane do łączenia tabel w instrukcjach SQL. Aby uzyskać więcej informacji na temat optymalizacji złączeń, zobacz sekcję „Używanie klastrów mieszających w celu zwiększenia wydajności”.

  • Wybierz klucze indeksu, które mają wysoką selektywność. Selektywność indeksu to procent wierszy w tabeli o tej samej wartości dla indeksowanego klucza. Selektywność indeksu jest optymalna, jeśli kilka wierszy ma tę samą wartość. Uwaga:Oracle automatycznie tworzy indeksy lub używa istniejących indeksów dla kluczy i wyrażeń kluczy unikatowych i podstawowych, które definiujesz z ograniczeniami integralności.Indeksowanie kolumn o niskiej selektywności może być pomocne, jeśli rozkład danych jest zniekształcony, tak że jedna lub dwie wartości występują często rzadziej niż inne wartości.

  • Nie używaj standardowych indeksów B-drzewa dla kluczy lub wyrażeń z kilkoma odrębnymi wartościami. Takie klucze lub wyrażenia zwykle mają słabą selektywność i dlatego nie optymalizują wydajności, chyba że często wybierane wartości kluczy pojawiają się rzadziej niż inne wartości kluczy. W takich przypadkach można efektywnie używać indeksów bitmapowych, chyba że indeks jest często modyfikowany, jak w przypadku aplikacji OLTP o wysokiej współbieżności.

  • Nie indeksuj często modyfikowanych kolumn. Instrukcje UPDATE modyfikujące indeksowane kolumny oraz instrukcje INSERT i DELETE modyfikujące indeksowane tabele trwają dłużej niż w przypadku braku indeksu. Takie instrukcje SQL muszą modyfikować dane w indeksach, jak również dane w tabelach. Generują również dodatkowe cofanie i ponawianie.

  • Nie indeksuj kluczy, które pojawiają się tylko w klauzulach WHERE z funkcjami lub operatorami. Klauzula WHERE, która używa funkcji innej niż MIN lub MAX, lub operatora z kluczem indeksowanym nie udostępnia ścieżki dostępu, która używa indeksu, z wyjątkiem indeksów opartych na funkcjach.

  • Rozważ indeksowanie kluczy obcych ograniczeń integralności referencyjnej w przypadkach, w których duża liczba jednoczesnych instrukcji INSERT, UPDATE i DELETE uzyskuje dostęp do tabel nadrzędnych i podrzędnych. Taki indeks umożliwia UPDATE i DELETE w tabeli nadrzędnej bez blokowania udostępniania tabeli podrzędnej.

  • Wybierając indeksowanie klucza, należy rozważyć, czy wzrost wydajności zapytań jest wart utraty wydajności w przypadku operacji INSERT, UPDATE i DELETE oraz wykorzystania miejsca wymaganego do przechowywania indeksu. Możesz poeksperymentować, porównując czasy przetwarzania instrukcji SQL z indeksami i bez indeksów. Możesz mierzyć czas przetwarzania za pomocą funkcji śledzenia SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać parametru dynamicznego w klauzuli IN zapytania o nazwie JPA?

  2. Usuwanie zduplikowanych wierszy z tabeli w Oracle

  3. Niejawna różnica konwersji CAST vs ssis przepływu danych

  4. Klastry zliczające SQL Oracle

  5. Sprawdź, czy dwa wybory są równoważne