- Indeksowanie służy do optymalizacji wydajności bazy danych poprzez minimalizację liczby dostępów do dysku wymaganych podczas przetwarzania zapytania.
- Indeks jest rodzajem struktury danych. Służy do szybkiego lokalizowania i uzyskiwania dostępu do danych w tabeli bazy danych.
Struktura indeksu:
Indeksy można tworzyć przy użyciu niektórych kolumn bazy danych.
- Pierwsza kolumna bazy danych to klucz wyszukiwania, który zawiera kopię klucza podstawowego lub klucza kandydującego tabeli. Wartości klucza podstawowego są przechowywane w posortowanej kolejności, dzięki czemu można łatwo uzyskać dostęp do odpowiednich danych.
- Druga kolumna bazy danych to odnośnik do danych. Zawiera zestaw wskaźników przechowujących adres bloku dysku, w którym można znaleźć wartość danego klucza.
Metody indeksowania
Uporządkowane indeksy
Indeksy są zwykle sortowane, aby przyspieszyć wyszukiwanie. Posortowane indeksy nazywane są indeksami uporządkowanymi.
Przykład : Załóżmy, że mamy tabelę pracowników zawierającą tysiące rekordów, z których każdy ma długość 10 bajtów. Jeśli ich identyfikatory zaczynają się od 1, 2, 3... itd. i musimy przeszukać ucznia z ID-543.
- W przypadku bazy danych bez indeksu musimy przeszukać blok dysku od początku aż do osiągnięcia 543. DBMS odczyta rekord po odczytaniu 543*10=5430 bajtów.
- W przypadku indeksu będziemy szukać po indeksach, a DBMS odczyta rekord po odczytaniu 542*2= 1084 bajtów, czyli znacznie mniej w porównaniu do poprzedniego przypadku.
Indeks podstawowy
- Jeśli indeks jest tworzony na podstawie klucza podstawowego tabeli, nazywa się to indeksowaniem podstawowym. Te klucze podstawowe są unikalne dla każdego rekordu i zawierają relację 1:1 pomiędzy rekordami.
- Ponieważ klucze podstawowe są przechowywane w posortowanej kolejności, wydajność operacji wyszukiwania jest dość wydajna.
- Indeks podstawowy można podzielić na dwa typy: indeks gęsty i indeks rzadki.
Gęsty indeks
- Indeks gęsty zawiera rekord indeksu dla każdej wartości klucza wyszukiwania w pliku danych. Dzięki temu wyszukiwanie jest szybsze.
- W tym przypadku liczba rekordów w tabeli indeksowej jest taka sama, jak liczba rekordów w tabeli głównej.
- Potrzebuje więcej miejsca do przechowywania samego rekordu indeksu. Rekordy indeksu mają klucz wyszukiwania i wskaźnik do rzeczywistego rekordu na dysku.
Rzadki indeks
- W pliku danych rekord indeksu pojawia się tylko dla kilku pozycji. Każdy element wskazuje na blok.
- W tym przypadku zamiast wskazywać każdy rekord w tabeli głównej, indeks wskazuje rekordy w tabeli głównej w luce.
Indeks klastrowania
- Indeks klastrowy można zdefiniować jako uporządkowany plik danych. Czasami indeks jest tworzony na kolumnach innych niż klucz podstawowy, które mogą nie być unikalne dla każdego rekordu.
- W tym przypadku, aby szybciej zidentyfikować rekord, zgrupujemy dwie lub więcej kolumn, aby uzyskać unikalną wartość i utworzyć z nich indeks. Ta metoda nazywa się indeksem grupującym.
- Grupuje się rekordy o podobnych cechach i dla tych grup tworzone są indeksy.
Przykład : załóżmy, że firma zatrudnia kilku pracowników w każdym dziale. Załóżmy, że używamy indeksu klastrowego, w którym wszyscy pracownicy należący do tego samego Dept_ID są uwzględniani w pojedynczym klastrze, a wskaźniki indeksu wskazują klaster jako całość. Tutaj Dept_Id jest nieunikalnym kluczem.
Poprzedni schemat jest trochę mylący, ponieważ jeden blok dysku jest współdzielony przez rekordy należące do innego klastra. Jeśli użyjemy oddzielnego bloku dyskowego dla oddzielnych klastrów, wówczas nazywa się to lepszą techniką.
Indeks wtórny
W indeksowaniu rzadkim wraz ze wzrostem rozmiaru tabeli rośnie również rozmiar mapowania. Te mapowania są zwykle przechowywane w pamięci podstawowej, więc pobieranie adresu powinno być szybsze. Następnie pamięć dodatkowa przeszukuje rzeczywiste dane na podstawie adresu uzyskanego z mapowania. Jeśli rozmiar mapowania rośnie, samo pobieranie adresu staje się wolniejsze. W tym przypadku indeks rzadki nie będzie efektywny. Aby przezwyciężyć ten problem, wprowadzono indeksowanie wtórne.
W przypadku indeksowania wtórnego, aby zmniejszyć rozmiar mapowania, wprowadza się inny poziom indeksowania. W tej metodzie początkowo wybierany jest ogromny zakres kolumn, tak aby rozmiar mapowania pierwszego poziomu stał się mały. Następnie każdy zakres jest dalej dzielony na mniejsze zakresy. Mapowanie pierwszego poziomu jest przechowywane w pamięci podstawowej, dzięki czemu pobieranie adresu jest szybsze. Mapowanie drugiego poziomu oraz dane rzeczywiste przechowywane są w pamięci dodatkowej (dysku twardym).
Na przykład:
- Jeśli chcesz znaleźć na diagramie zapis rolki 111, to wyszuka on najwyższy wpis, który jest mniejszy lub równy 111 w indeksie pierwszego poziomu. Na tym poziomie dostanie 100.
- Następnie na drugim poziomie indeksu ponownie osiąga maksimum (111)<= 111 and gets 110. now using the address 110, it goes to data block starts searching each record till 111. < li>
- W ten sposób odbywa się wyszukiwanie tą metodą. Wstawianie, aktualizacja lub usuwanie również odbywa się w ten sam sposób. =>