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

Indeksy Oracle i rodzaje indeksów w Oracle z przykładem

W tym poście będziemy omawiać indeksy/typy indeksów Oracle w Oracle z przykładami. Omówię w świetle wszystkie opcje tworzenia indeksu w Oracle. Omówię również, jak sprawdzić rozmiar indeksu w Oracle. Mam nadzieję, że spodoba Ci się ten post. Nie mogę się doczekać  informacji o tym poście

Co to są indeksy Oracle?

  • Podobnie jak mamy indeks w podręcznikach, który pomaga nam znaleźć konkretny temat w książce, indeks Oracle zachowuje się w ten sam sposób. W Oracle mamy różne typy indeksów.
  • Indeksy służą do szybkiego przeszukiwania wierszy w tabeli Oracle. Jeśli indeks nie jest obecny, zapytanie wybierające musi odczytać całą tabelę i zwrócić wiersze. Dzięki indeksowi wiersze można szybko pobrać
  • Powinniśmy tworzyć indeksy podczas pobierania niewielkiej liczby wierszy z tabeli. lub jak najszybciej pobrać pierwszy zestaw wierszy z jakiegoś zapytania, które ostatecznie zwróci dużą liczbę wierszy. Zależy to również od dystrybucji danych, tj. współczynnika klastrowania
  • Indeksy są logicznie i fizycznie niezależne od danych w powiązanej tabeli.
  • Indeksy to opcjonalne struktury powiązane z tabelami i klastrami. Możesz tworzyć indeksy w jednej lub kilku kolumnach tabeli, aby przyspieszyć wykonywanie instrukcji SQL w tej tabeli.
  • Indeksy są głównym sposobem na zmniejszenie liczby operacji we/wy dysku, gdy są prawidłowo używane.
  • Zapytanie decyduje na początku, czy użyć indeksu, czy nie
  • Najlepszą rzeczą w przypadku indeksów jest to, że wydajność pobierania zindeksowanych danych pozostaje prawie stała, nawet po wstawianiu nowych wierszy. Jednak obecność wielu indeksów w tabeli zmniejsza wydajność aktualizacji, usuwania i wstawiania, ponieważ Oracle musi również aktualizować indeksy powiązane z tabelą.
  • Jeśli jesteś właścicielem tabeli, możesz utworzyć indeks lub jeśli chcesz utworzyć indeks dla tabeli w innym schemacie, musisz mieć uprawnienie systemowe CREATE ANY INDEX lub uprawnienie do indeksowania tej tabeli

Logiczny typ indeksów

Określa właściwości aplikacji Indeksu

Unikalne lub nieunikalne Indeks może być unikalny lub nieunikalny. Oracle tworzy unikalny indeks dla klucza podstawowego i ograniczeń dotyczących unikatowego klucza
Jeśli nieunikalne indeksy są już obecne w tej kolumnie, nie utworzy nowego unikalnego indeksu dla klucza podstawowego w Oracle
Kompozyt Indeks może składać się z jednej lub wielu kolumn. Indeksy złożone mogą przyspieszyć pobieranie danych dla instrukcji SELECT, w których klauzula WHERE odwołuje się do wszystkich lub wiodącej części kolumn w indeksie złożonym.
Indeksy oparte na funkcjach Dane indeksowanej kolumny są oparte na obliczeniach
Indeksy domen aplikacji Ten indeks jest używany w zastosowaniach specjalnych (przestrzenne, tekstowe).

Co to jest kolumna ROWID Pseudo

ROWID zwraca adres każdego wiersza w tabeli. Oracle przypisuje ROWID do każdego wiersza. ROWID składa się z następujących

  • Numer obiektu danych obiektu
  • Blok danych w pliku danych, w którym znajduje się wiersz
  • Pozycja wiersza w bloku danych (pierwszy wiersz to 0)
  • Plik danych, w którym znajduje się wiersz (pierwszy plik to 1). Numer pliku odnosi się do obszaru tabel.

Oracle używa wewnętrznie ROWID, aby uzyskać dostęp do wierszy. Na przykład Oracle przechowuje ROWID w indeksie i używa go do uzyskania dostępu do wiersza w tabeli.

Możesz wyświetlić ROWID wierszy za pomocą polecenia SELECT w następujący sposób:

wybierz rowid, emp_name z emp;

ROWID EMP_NAME

AAADC576474722aSAAA   Jan

Oracle dostarcza pakiet o nazwie DBMS_ROWID do dekodowania ROWID.

Po przypisaniu wiersza ROWID Oracle nie zmienia ROWID w okresie istnienia wiersza. Ale to się zmienia, gdy tabela jest przebudowywana, gdy wiersze są przesuwane przez partycję lub zmniejsza się tabela

Typy indeksów w Oracle z przykładem

W Oracle istnieje 6 różnych typów indeksów

(1) B-drzewo

(2) Skompresowane drzewo B

(3)  Bitmapa

(4) Oparte na funkcjach

(5) Odwróć klawisz (RKI)

(6) Tabela uporządkowana według indeksu (IOT).

Dowiedzmy się szczegółowo każdego z nich i jak utworzyć indeks w Oracle dla każdego z tych typów

B – Indeks drzewa:

  • Indeksy B-Tree (drzewo zrównoważone) są najczęstszym rodzajem indeksu.
  • Indeks B-Tree przechowywał ROWID i wartość klucza indeksu w strukturze drzewa.
  • Podczas tworzenia indeksu tworzony jest blok ROOT, następnie bloki BRANCH, a na końcu bloki LEAF.
  • Każda gałąź zawiera zakres danych, które przechowuje w swoich blokach liści, a każdy korzeń zawiera zakres danych, które przechowuje w swoich gałęziach:
  • Indeksy B-Tree są najbardziej przydatne w kolumnach, które pojawiają się w klauzuli WHERE (SELECT … WHERE EMPNO=1).
  • Serwer Oracle utrzymuje równowagę drzewa, dzieląc bloki indeksu, gdy nowe dane są wstawiane do tabeli.
  • Za każdym razem, gdy instrukcja DML jest wykonywana w tabeli indeksu, następuje aktywność indeksu, powodując wzrost indeksu (dodaj liść i gałęzie).

Zalety

  • Wszystkie bloki liści drzewa znajdują się na tej samej głębokości.
  • Indeksy B-drzewa są automatycznie zrównoważone.
  • Wszystkie bloki drzewa B są średnio wypełnione w trzech czwartych.
  • B-drzewa zapewniają doskonałą wydajność wyszukiwania dla szerokiego zakresu zapytań, w tym dokładnego dopasowania i wyszukiwania zakresów.
  • Wstawianie, aktualizacje i usuwanie są wydajne, zachowując kolejność kluczy w celu szybkiego wyszukiwania.
  • Wydajność B-drzewa jest dobra zarówno dla małych, jak i dużych stołów i nie zmniejsza się wraz ze wzrostem rozmiaru stołu.
CREATE   INDEX ON  (,…)TABLESPACE ;Przykład Utwórz indeks   scott.exp_idx   w tabeli scott.example(  nazwa) 

Co to są skompresowane indeksy B-drzewa

  • Skompresowane indeksy B-Tree są budowane na dużych tabelach w środowisku hurtowni danych. W tego typu indeksie eliminowane są zduplikowane wystąpienia tej samej wartości, zmniejszając w ten sposób ilość miejsca do przechowywania wymaganego przez indeks.
  • W skompresowanym indeksie B-Tree dla każdej wartości klucza przechowywana jest lista identyfikatorów ROWID
  • Określenie słowa kluczowego COMPRESS podczas tworzenia indeksu (CREATE INDEX … COMPRESS) spowoduje utworzenie skompresowanego indeksu B-Tree.
  • Zwykły indeks B-Tree można odbudować za pomocą słowa kluczowego COMPRESS, aby go skompresować.
CREATE   INDEX ON  (,…)PCTFREE TABLESPACE Compress  

Co to są indeksy bitmapowe

  • Indeksy bitmapowe są najbardziej odpowiednie dla danych o małej wyraźnej kardynalności (w przeciwieństwie do indeksów B-Tree).
  • Ten typ indeksu tworzy mapę binarną wszystkich wartości indeksu i przechowuje tę mapę w blokach indeksu, oznacza to, że indeks będzie wymagał mniej miejsca niż indeks B-Tree.
  • Każdy bit w bitmapie odpowiada możliwemu wierszowi. Jeśli bit jest ustawiony, oznacza to, że wiersz z odpowiednim identyfikatorem rowid zawiera wartość klucza. Funkcja mapowania konwertuje pozycję bitową na rzeczywisty wiersz, więc indeks bitmapy zapewnia taką samą funkcjonalność jak zwykły indeks, mimo że wewnętrznie używa innej reprezentacji. Jeśli liczba różnych wartości kluczy jest niewielka, indeksy bitmapowe są bardzo wydajne w przestrzeni
  • Gdy w tabelach znajdują się indeksy bitmapowe, aktualizacje usuwają pełne blokady tabel. Tak więc indeks bitmapowy jest przydatny w przypadku dużych kolumn z niską aktywnością DML (rzadkie aktualizacje) lub tabel tylko do odczytu. To jest powód, dla którego często zdarza się, że indeksy bitmapowe są szeroko stosowane w środowisku hurtowni danych (DWH).
  • Struktura indeksu mapy bitowej zawiera mapę bitów, które wskazują wartość w kolumnie, na przykład dla kolumny GENDER, blok indeksu będzie zawierał początkowy ROWID, końcowy ROWID i mapę bitową:
  • Indeksy bitmapowe są bardzo przydatne, gdy są tworzone na kolumnach o niskiej kardynalności, używane z operatorem AND &OR w warunku zapytania:
CREATE BITMAP  INDEX ON  (,…)PCTFREE TABLESPACE 

Przykład

UTWÓRZ INDEKS BITMAP NA emp_data(płeć);WYBIERZ LICZNIK(*) Z emp_dataWHERE PŁEĆ='M”;

Zalety indeksów bitmapowych

  • Zredukowany czas odpowiedzi dla dużych klas zapytań
  • Znaczne zmniejszenie wykorzystania przestrzeni w porównaniu z innymi technikami indeksowania
  • Dramatyczny wzrost wydajności nawet na bardzo niskim sprzęcie
  • Bardzo wydajne równoległe DML i obciążenia

Indeksy oparte na funkcjach

Indeksy oparte na funkcjach to indeksy tworzone na kolumnach, na których zwykle stosowana jest funkcja.

Podczas używania funkcji na indeksowanej kolumnie, indeks jest ignorowany, dlatego indeks oparty na funkcji jest bardzo przydatny do tych operacji.

CREATE INDEX ON  [ Function(,;PrzykładCREATE INDEX EMP_IDX on EMP(UPPER(ENAME));SELECT *FROM EmpWHERE UPPER(Ename) jak „JAN”;

Co to są indeksy z odwróconym kluczem

  • Są to specjalne typy indeksów B-Tree i są bardzo przydatne, gdy są tworzone na kolumnach zawierających kolejne liczby.
  • W przypadku korzystania ze zwykłego drzewa B, indeks będzie rósł i miał wiele gałęzi i być może kilka poziomów, powodując w ten sposób pogorszenie wydajności, RKI rozwiązuje problem, odwracając bajty każdego klucza kolumny i indeksując nowe dane.
  • Ta metoda rozprowadza dane równomiernie w indeksie. Tworzenie RKI odbywa się za pomocą słowa kluczowego REVERSE:CREATE INDEX … ON … REVERSE;
CREATE INDEX ON  ()TABLESPACE REVERSE;PrzykładCREATE INDEX emp_idx i ON emp_table (imię,nazwisko) REVERSE;

Co to są tabele zorganizowane według indeksu (IOT)

  • Kiedy używamy B-Tree, indeksy bitmapy i klucza odwrotnego są używane dla tabel przechowujących dane w sposób nieuporządkowany (tabele sterty).
  • Te indeksy zawierają lokalizację ROWID wymaganego wiersza tabeli, umożliwiając w ten sposób bezpośredni dostęp do danych wiersza
  • Tabela zorganizowana według indeksu różni się od zwykłej tabeli, ponieważ dane tabeli są przechowywane w skojarzonym z nią indeksie. Zmiany w danych tabeli, takie jak dodawanie nowych wierszy, aktualizowanie wierszy lub usuwanie wierszy, powodują aktualizację indeksu.
  • Tabela zorganizowana według indeksu jest jak zwykła tabela z indeksem w jednej lub kilku kolumnach, ale zamiast utrzymywać dwie oddzielne pamięci dla tabeli i indeksu B-drzewa, system bazy danych utrzymuje tylko jedną B- indeks drzewa, który zawiera zarówno zakodowaną wartość klucza, jak i skojarzone wartości kolumn dla odpowiedniego wiersza. Zamiast mieć rowid wiersza jako drugi element pozycji indeksu, rzeczywisty wiersz danych jest przechowywany w indeksie B-drzewa. Wiersze danych są zbudowane na kluczu podstawowym tabeli, a każdy wpis indeksu B-drzewa zawiera . Tabele zorganizowane według indeksu są odpowiednie do uzyskiwania dostępu do danych za pomocą klucza podstawowego lub dowolnego klucza, który jest prawidłowym prefiksem klucza podstawowego.
  • Nie ma duplikacji wartości kluczy, ponieważ z kluczem są przechowywane tylko wartości kolumn, które nie są kluczami. Możesz budować indeksy pomocnicze, aby zapewnić wydajny dostęp przez inne kolumny. Aplikacje manipulują tabelą zorganizowaną według indeksu tak jak zwykłą tabelą, używając instrukcji SQL. Jednak system bazy danych wykonuje wszystkie operacje, manipulując odpowiednim indeksem B-drzewa.

Funkcje uporządkowanej tabeli indeksu

  • Klucz podstawowy jednoznacznie identyfikuje wiersz; klucz główny musi być określony
  • Dostęp na podstawie klucza podstawowego
  • Rówid logiczny w pseudokolumnie ROWID umożliwia budowanie indeksów wtórnych
  • UNIKALNE ograniczenie jest niedozwolone, ale wyzwalacze są dozwolone
  • Nie można przechowywać w klastrze
  • Może zawierać kolumny LOB, ale nie LONG
  • Dystrybucja i replikacja nie są obsługiwane


CREATE TABLE polecenie:CREATE TABLE …ORGANIZATION INDEX TABLESPACE … (określ, że jest to IOT)PCTTHRESHOLD … (określ % bloku do przechowania w celu przechowywania danych wiersza, poprawny 0-50 (domyślnie 50))INCLUDING … (określ która kolumna ma rozbić wiersz, gdy długość wiersza przekracza PCTTHRESHOLD) OVERFLOW TABLESPACE … (określ obszar tabel, w którym będzie przechowywana druga część wiersza) MAPPING TABLE; (powoduje utworzenie tabeli mapowania, potrzebnej podczas tworzenia indeksu bitmapowego w IOT)

Tabela mapowania mapuje fizyczne identyfikatory ROWID indeksu na logiczne identyfikatory ROWID w IOT. IOT używa logicznych identyfikatorów ROWID do zarządzania dostępem do tabeli według indeksu, ponieważ fizyczne identyfikatory ROWID są zmieniane za każdym razem, gdy dane są dodawane lub usuwane z tabeli. Aby odróżnić IOT od innych indeksów, przeprowadź zapytanie do widoku USER_INDEXES za pomocą kolumny pct_direct_access. Tylko IOT będzie miał dla tej kolumny wartość inną niż NULL.

Indeksy domen aplikacji

Oracle zapewnia rozszerzalne indeksowanie w celu dostosowania indeksów do złożonych typów danych, takich jak dokumenty, dane przestrzenne, obrazy i klipy wideo oraz do korzystania ze specjalistycznych technik indeksowania.

Dzięki indeksowaniu rozszerzalnemu można hermetyzować procedury zarządzania indeksami specyficzne dla aplikacji jako typ indeksu obiekt schematu i zdefiniuj indeks domeny (indeks specyficzny dla aplikacji) w kolumnach tabeli lub atrybutach typu obiektu. Rozszerzalne indeksowanie zapewnia również wydajne przetwarzanie specyficznego dla aplikacji operatora s.

Oprogramowanie użytkowe o nazwie kartridg e, kontroluje strukturę i zawartość indeksu domeny. Serwer Oracle współdziała z aplikacją w celu budowania, utrzymywania i przeszukiwania indeksu domeny. Sama struktura indeksu może być przechowywana w bazie danych Oracle jako tabela zorganizowana według indeksu lub zewnętrznie jako plik.

Korzystanie z indeksów domen

Indeksy domeny są budowane przy użyciu logiki indeksowania dostarczanej przez typ indeksu zdefiniowany przez użytkownika. Typ indeksu zapewnia wydajny mechanizm dostępu do danych, które spełniają określone predykaty operatora. Zazwyczaj typ indeksu zdefiniowany przez użytkownika jest częścią opcji Oracle, podobnie jak opcja Spatial.

Na przykład SpatialIndextype umożliwia wydajne wyszukiwanie i pobieranie danych przestrzennych, które nakładają się na daną ramkę ograniczającą.

Wkład określa parametry, które można określić podczas tworzenia i utrzymywania indeksu domeny. Podobnie, charakterystyka wydajności i przechowywania indeksu domeny jest przedstawiona w dokumentacji określonej kasety.

Do tej pory omówiliśmy różne typy indeksów w Oracle na przykładzie, teraz sprawdźmy, jak je zmienić/upuścić/odtworzyć

Jak odtworzyć indeksy/odbudować indeks w Oracle

Możemy użyć instrukcji ALTER INDEX … REBUILD do reorganizacji lub kompaktowania istniejącego indeksu lub zmiany jego charakterystyki przechowywania

Instrukcja REBUILD wykorzystuje istniejący indeks jako podstawę dla nowego.

ALTER INDEX… ODBUDOWANA jest zwykle szybsza niż upuszczanie i ponowne tworzenie indeksu.

Odczytuje wszystkie bloki indeksu za pomocą wieloblokowych we/wy, a następnie odrzuca bloki rozgałęzień.

Kolejną zaletą tego podejścia jest to, że stary indeks jest nadal dostępny dla zapytań, gdy trwa przebudowa.

Alter index    odbuduj;Alter indeks    odbuduj  obszar tabel ;

Jak pisać stwierdzenia, które unikają używania indeksów

  • Możesz użyć podpowiedzi optymalizatora NO_INDEX, aby zapewnić CBO maksymalną elastyczność, jednocześnie nie zezwalając na użycie określonego indeksu.
  • Możesz użyć podpowiedzi FULL, aby zmusić optymalizator do wybrania pełnego skanowania tabeli zamiast skanowania indeksu.
  • Możesz użyć wskazówek INDEX, INDEX_COMBINE lub AND_EQUAL, aby zmusić optymalizator do używania jednego indeksu lub zestawu wymienionych indeksów zamiast innego.

Jak zbierać statystyki dla indeksów

Statystyki indeksów są gromadzone za pomocą instrukcji ANALYZE INDEX lub dbms_stats.

Dostępne opcje to OBLICZ/SZACUJ STATYSTYKI lub WERYFIKACJA STRUKTURY.

Od 10g, po utworzeniu indeksu, statystyki obliczeniowe są wykonywane automatycznie

Korzystając ze struktury walidacji, Oracle zapełnia widok INDEX_STATS statystykami związanymi z analizowanym indeksem. Statystyki zawierają liczbę wierszy i bloków liści (LF_ROWS, LF_BLKS), liczbę wierszy i bloków rozgałęzień (BR_ROWS, BR_BLKS), liczbę usuniętych wierszy liści (DEL_LF_ROWS), zastosowaną spację (USED_SPACE), liczbę odrębnych kluczy (DISTINCT_KEYS) itp. Te statystyki można wykorzystać do określenia, czy indeks powinien zostać odbudowany, czy nie

Jak Oracle decyduje o wykorzystaniu indeksu?

Oracle automatycznie decyduje, czy indeks powinien być używany przez silnik Optymalizatora.

Oracle decyduje, czy użyć indeksu, czy nie, w zależności od zapytania.

Oracle może zrozumieć, czy użycie indeksu poprawi wydajność danego zapytania. Jeśli Oracle uważa, że ​​użycie indeksu poprawi wydajność, użyje indeksu, w przeciwnym razie zignoruje indeks.

Pozwól nam  zrozumieć ten przykład

Mamy tabelę emp   zawierającą emp_name, salary,dept_no ,emp_no,date_of_joining i mamy indeks emp_name

Zapytanie 1

wybierz * z emp, gdzie emp_name =„Jan”;

Powyższe zapytanie użyje indeksu, ponieważ próbujemy uzyskać informacje o emp na podstawie nazwy.

Zapytanie 2

wybierz * z emp;

Powyższe zapytanie nie użyje indeksu, ponieważ próbujemy znaleźć wszystkie wiersze w tabeli i nie mamy klauzuli where w zapytaniu

Zapytanie 3

wybierz * z emp, gdzie dept_no =5;

Powyższe zapytanie nie użyje indeksu, ponieważ klauzula WHERE nie wybiera kolumny, która ma indeks

Zapytanie 4

wybierz * z emp gdzie substr(emp_name,1,4) =’XYZW’;

Powyższe zapytanie nie użyje indeksu, ponieważ klauzula where używa funkcji w kolumnie, a nie mamy indeksu funkcjonalnego w emp_name

Jak stworzyć lub odbudować indeks online?

Oracle w starszych wersjach blokował tabelę, na której tworzony jest indeks, podczas całego procesu tworzenia. To sprawia, że ​​tabela jest niedostępna do manipulacji danymi podczas tworzenia indeksu.

Teraz w 8i firma Oracle wprowadziła przebudowę indeksu online, w której Oracle nie blokuje tabeli, na której budowany jest indeks.

Indeksowanie online zapewnia słowo kluczowe ONLINE.

CREATE   INDEX ON  (,…)PCTFREE TABLESPACE Online;Zmień indeks  odbuduj online;

Zasadniczo, przy przebudowie online, Oracle blokuje tabelę na początku i na końcu tworzenia indeksu. Pozwala na transakcje pomiędzy. Mechanizm został znacznie ulepszony dzięki 11g i 12c

Jakie są wady indeksów

Indeksy zwiększają wydajność zapytania wybierającego, mogą również zmniejszać wydajność manipulacji danymi.

Wiele indeksów w tabeli może drastycznie spowolnić WSTAWIANIE i USUWANIE

Im więcej indeksów w tabeli, tym więcej czasu zajmie wstawianie i usuwanie.

Podobnie każda zmiana w indeksowanej kolumnie będzie wymagała zmiany indeksu.

Dlatego musimy bardzo ostrożnie wybrać indeks i odrzucić te, które nie są używane.

Chociaż dodatkowa przestrzeń zajmowana przez indeksy jest również brana pod uwagę, może to nie mieć większego znaczenia, ponieważ koszt przechowywania danych znacznie spadł.

Co to są indeksy, których nie można używać

Nieużyteczny indeks jest ignorowany przez optymalizator przy podejmowaniu decyzji o planie wyjaśnienia

Nie jest również obsługiwany przez DML, tj. Aktualizuj, wstawiaj, usuwaj, czy aktualizuje indeks

Może istnieć kilka powodów, dla których indeks nie nadaje się do użytku. Zrobiłeś odbudowę tabeli, ale nie odbudowałeś indeksu, wtedy indeks będzie w stanie bezużytecznym. Innym powodem, dla którego indeks nie nadaje się do użytku, jest poprawa wydajności ładowania zbiorczego. Innym powodem może być to, że optymalizator za każdym razem wybiera niewłaściwy indeks, a czas ma krytyczne znaczenie, więc możesz zdecydować, że nie będzie on nadawał się do użytku

Nieużyteczny indeks lub partycja indeksu musi zostać odbudowana lub usunięta i ponownie utworzona, zanim będzie można jej użyć. Obcięcie tabeli powoduje, że indeks, którego nie można używać, jest ważny.

Począwszy od Oracle Database 11g Release 2, gdy istniejący indeks stanie się bezużyteczny, jego segment indeksu zostanie usunięty.

Funkcjonalność nieużytecznych indeksów zależy od ustawienia parametru inicjującego SKIP_UNUSABLE_INDEXES.

Gdy SKIP_UNUSABLE_INDEXES ma wartość TRUE (wartość domyślna), to:

Instrukcje DML w odniesieniu do tabeli są kontynuowane, ale nieużyteczne indeksy nie są utrzymywane.

Instrukcje DML kończą się błędem, jeśli istnieją jakieś nieużyteczne indeksy, które są używane do wymuszania ograniczenia UNIQUE.

W przypadku indeksów niepartycjonowanych podczas tworzenia planu dostępu dla instrukcji SELECT optymalizator nie uwzględnia żadnych indeksów bezużytecznych. Jedynym wyjątkiem jest sytuacja, gdy indeks jest wyraźnie określony we wskazówce INDEX().

Gdy SKIP_UNUSABLE_INDEXES ma wartość FALSE, to:

Jeśli obecne są jakiekolwiek nieużyteczne indeksy lub partycje indeksu, wszelkie instrukcje DML, które spowodowałyby aktualizację tych indeksów lub partycji indeksu, są kończone z błędem.

W przypadku instrukcji SELECT, jeśli istnieje indeks lub partycja indeksu, której nie można używać, ale optymalizator nie zdecyduje się na użycie jej w planie dostępu, instrukcja jest kontynuowana. Jeśli jednak optymalizator zdecyduje się na użycie nieużytecznego indeksu lub nieużytecznej partycji indeksu, instrukcja kończy się błędem.

Widoki słownika danych w indeksach

DBA_INDEXES ALL_INDEXES USER_INDEXES Widok DBA opisuje indeksy we wszystkich tabelach w bazie danych. Widok ALL opisuje indeksy we wszystkich tabelach dostępnych dla użytkownika. Widok USER jest ograniczony do indeksów należących do użytkownika. Niektóre kolumny w tych widokach zawierają statystyki generowane przez pakiet DBMS_STATS lub instrukcję ANALYZE.
DBA_IND_COLUMNS ALL_IND_COLUMNS

USER_IND_COLUMNS

Te widoki opisują kolumny indeksów w tabelach. Niektóre kolumny w tych widokach zawierają statystyki generowane przez pakiet DBMS_STATS lub instrukcję ANALYZE.
DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS

USER_IND_EXPRESSIONS

Te widoki opisują wyrażenia indeksów opartych na funkcjach w tabelach.
DBA_IND_STATISTICS ALL_IND_STATISTICS

USER_IND_STATISTICS

Te widoki zawierają statystyki optymalizatora dla indeksów.

jak znaleźć indeksy w tabeli

ustaw rozmiar strony 50000 weryfikuj wyłączone echo offcol nazwa_tabeli nagłówek 'Nazwa_tabeli' format a20col nazwa_indeksu nagłówek 'Nazwa indeksu' a25col nazwa_kolumny nagłówek 'Nazwa kolumny' format a30break na nazwa_tabeli na nazwie_indeksuselect     nazwa_tabeli, nazwa_indeksu, nazwa_kolumny z all_ind_kolumnygdzie nazwa_tabeli jak górna('&Table) ')kolejność według nazwy_tabeli, nazwy_indeksu, pozycji_kolumny/

Jak określić rozmiar indeksu

Rozmiar INDEKSU wybierz segment_name,sum(bytes)/1024/1024/1024 jako "ROZMIAR w GB" z segmentów użytkownika, gdzie segment_name='INDEX_NAME' grupuj według nazwy_segmentu;LUB wybierz właściciela,nazwa_segmentu,sum(bytes)/1024/1024/1024 jako "SIZE w GB" z dba_segments, gdzie właściciel='SCHEMA_NAME' i segment_name='INDEX_NAME' grupuj według właściciela,segment_name; Lista rozmiarów wszystkich INDEKSÓW UŻYTKOWNIKA wybierz nazwę_segmentu,suma(bajty)/1024/1024/1024 jako „ROZMIAR w GB” z segmentów użytkowników, gdzie segment_type='INDEX' grupuj według kolejności nazw_segmentu według „ROZMIAR w GB” desc;LUB wybierz właściciela,nazwa_segmentu,suma(bajty)/1024 /1024/1024 jako „ROZMIAR w GB” z dba_segments, gdzie właściciel='SCHEMA_NAME' i segment_type='INDEX' grupuj według właściciela,segment_name order według „ROZMIAR w GB” opis;Suma rozmiarów wszystkich indeksów wybierz właściciela,sum(bytes)/1024/1024/1024 jako „ROZMIAR w GB” z dba_segments, gdzie właściciel='SCHEMA_NAME' i segment_type='INDEX' pogrupuj według właściciela;

Jak określić indeks  definicja

ustaw długi 4000select dbms_metadata.get_ddl('INDEX','',' 

Jak określić statystyki indeksu

ustaw strony 250set rozmiar linii 100set sprawdź offcol nazwa_tabeli format a24 nagłówek 'NAZWA_TABELI'col nazwa_indeksu format a23 nagłówek 'INDEX'col u format a1 nagłówek 'U'col blevel format 0 nagłówek 'BL'col format bloków_liści 999990 nagłówek 'LEAF |BLOKÓW'kol format odrębnych_kluczy 9999990 nagłówek 'DISTINCT|KLUCZE'kol format avg_leaf_blocks_per_key 9999990 nagłówek 'LEAF|BLKS|/KEY'kol avg_data_blocks_per_key format 9999990 nagłówek 'DANE|BLKS|/KEY'rembreak w tabeli_nazwa_indeksu, nazwa_indeksu, tabela_nazwa_klucza 'UNIQUE', 'U', null ) u,blevel, leaf_blocks, differ_keys,avg_leaf_blocks_per_key, avg_data_blocks_per_keyfrom sys.dba_indexeswhere table_owner jak górny('&owner')i nazwa_tabeli jak górny('&table'),name_table_name, table_owner /pre>

 Powiązane artykuły

tabele zewnętrzne w Oracle :Sprawdź ten post, aby uzyskać informacje na temat korzystania z tabel zewnętrznych w Oracle z przykładem, jak utworzyć tabelę zewnętrzną, jak jej używać
Oracle Utwórz tabelę :Tabele są podstawową jednostką danych przechowywanie w bazie danych Oracle. omawiamy, jak używać polecenia Oracle create table do tworzenia tabeli z kluczem obcym /kluczem podstawowym
oświadczenie Oracle create tablespace:ten artykuł o tworzeniu przestrzeni tabel w Oracle, różnych cechach z nią związanych i różnych instrukcjach tworzenia przestrzeni tabel
Znajdź stan indeksów i przypisane kolumny dla tabeli
Wirtualny indeks w Oracle:Co to jest wirtualny indeks w Oracle? Zastosowania, ograniczenia, przewaga i sposób używania do sprawdzania w celu wyjaśnienia planu w bazie danych Oracle, Ukryty parametr _USE_NOSEGMENT_INDEXES
Współczynnik klastrowania Oracle Index:Jak obliczany jest współczynnik klastrowania Oracle Index i jaki ma on wpływ na plan wyjaśniania
Oracle Partition Indeks :Zrozumienie indeksu partycji Oracle, Co to są globalne indeksy niepartycjonowane?, Co to są indeksy lokalne z prefiksem, indeks lokalny bez prefiksu

Polecane kursy

Oto fajny kurs Udemy dotyczący Oracle SQL
Oracle-Sql-Step-by-step :Ten kurs obejmuje podstawowy SQL, złączenia, tworzenie tabel i modyfikowanie ich struktury, tworzenie widoków, łączenie, łączenie i wiele innych rzeczy . Świetny kurs i obowiązkowy kurs dla początkujących SQL
Pełny kurs certyfikacji Oracle SQL :To dobry kurs dla każdego, kto chce być gotowym do pracy w zakresie umiejętności programistycznych SQL. Fajnie objaśniony kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Narzędzie programistyczne Oracle SQL jest używane przez wielu programistów. Ten kurs zawiera sztuczki i lekcje, jak skutecznie z niego korzystać i zostać produktywnym programistą sql
Oracle SQL Performance Tuning Masterclass 2020 :Dostrajanie wydajności jest jedną z najważniejszych i najbardziej poszukiwanych umiejętności. To dobry kurs, aby się o tym dowiedzieć i zacząć dostrajać wydajność 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 znaleźć pracownika z drugą najwyższą pensją?

  2. Oracle Połącz kilka kolumn w jedną

  3. Oracle SQL Developer:Awaria — Test nie powiódł się:Karta sieciowa nie może nawiązać połączenia?

  4. cx_Oracle i obsługa wyjątków — dobre praktyki?

  5. Szybkie partycjonowanie