Typy indeksów Indeks jest zakładany na atrybucie relacji atrybucie indeksowym (ang. indexing field). Indeks zawiera wartości atrybutu indeksowego wraz ze wskaźnikami do wszystkich bloków dyskowych zawierających rekordy z tymi wartościami pól.: Indexing field value record block Wartości indeksu są uporządkowane, można więc stosować przeszukiwanie binarne. Plik indeksów jest znacznie mniejszy od właściwego pliku. Indeks podstawowy (ang. primary index) jest określony na uporządkowanym atrybucie (polu) klucza pliku uporządkowanego. Pole to jest wykorzystywane do fizycznego uporządkowania rekordów na dysku Indeks zgrupowany (ang. clustering index) jeśli atrybut (pole) porządkujący nie jest polem klucza, tzn. kilka rekordów w pliku może mieć tą samą wartość tego pola.!!!!! Plik może mieć tylko jedno fizyczne uporządkowanie, a więc...??? Indeks wtórny (drugorzędny) (ang. secondary index) jest określony na nieuporządkowanym atrybucie (polu) rekordu. Plik może mieć wiele indeksów wtórnych, niezależnie od indeksu podstawowego. Indeks wielopoziomowy - konstruowane na bazie indeksów podstawowych, zgrupowanych i wtórnych. Systemy baz danych - Zbyszko Królikowski 1 Indeks podstawowy przykład: Systemy baz danych - Zbyszko Królikowski 3 Indeks podstawowy Indeks podstawowy jest to uporządkowany plik rekordów o stałej długości i dwóch polach ordering key field to disk block Klucz główny Adres bloku dyskowego Dla każdego bloku pliku danych istnieje tylko jeden rekord indeksu w pliku indeksowym. Każdy rekord indeksu posiada wartość klucza podstawowego pierwszego rekordu w bloku oraz wskaźnik (adres) tego bloku. I-ty rekord indeksu: < K ( i ), P ( i ) > Pierwsze trzy rekordy indeksu z przykładu poniżej są następujące: < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 > < K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (3) = ( Alexander, Ed ), P (3) = adres bloku 3 > Systemy baz danych - Zbyszko Królikowski 2 Indeks podstawowy Ogólna liczba rekordów w pliku indeksu odpowiada liczbie bloków pliku danych. Pierwszy rekord w bloku danych jest nazywany rekordem kotwiczącym bloku (ang. anchor rekord). Indeks podstawowy jest indeksem rzadkim zawiera jeden rekord dla całego bloku danych, a nie dla każdego rekordu w pliku danych (indeks gęsty). Liczba bloków indeksu jest << od liczby bloków pliku; przeszukiwanie binarne w pliku indeksowym wymaga znacznie mniejszej liczby dostępów niż do pliku danych. Problemy: wstawianie i usuwanie rekordów w pliku danych Wstawienie nowego rekordu (np. Aker patrz rysunek wyżej) wymaga nie tylko przesunięcia rekordów w pliku danych ale również wymaga zmian w pliku indeksowym, ponieważ przesunięcie rekordów powoduje zmianę rekordu kotwiczącego bloku Rozwiązania: nieuporządkowany plik przepełnienia lub lista łączona rekordów przepełnienia Systemy baz danych - Zbyszko Królikowski 4
Indeks gęsty vs rzadki Systemy baz danych - Zbyszko Królikowski 5 Indeks zgrupowany Systemy baz danych - Zbyszko Królikowski 7 Indeks zgrupowany Jeżeli rekordy pliku są uporządkowane fizycznie według wartości pola niekluczowego (pole grupujące ang. clustering field) to indeks zdefiniowany na takim polu nazywamy indeksem zgrupowanym Poszczególne rekordy indeksu odnoszą się do unikalnych wartości pola grupującego i zawierają wskaźniki do zawsze pierwszego bloku danych zawierającego daną wartość pola grupującego. Wstawianie i usuwanie rekordów stanowi problem, ponieważ rekordy danych są fizycznie uporządkowane. Rozwiązanie: rezerwowanie całego bloku dla każdej wartości pola grupującego wszystkie rekordy z tą wartością są lokowane w tym bloku. Jeśli jeden blok nie wystarcza, to alokowany jest dodatkowy blok i łączony z poprzednim wskaźnikiem Indeks zgrupowany jest również indeksem rzadkim, ponieważ dotyczy unikalnych wartości pola indeksowego, a nie wszystkich rekordów w pliku. Systemy baz danych - Zbyszko Królikowski 6 Indeks zgrupowany rozwiązanie problemu wstawiania i usuwania rekordów Systemy baz danych - Zbyszko Królikowski 8
Indeks wtórny Indeks wtórny jest zakładany na polu nieporządkującym plik danych. Może istnieć wiele indeksów wtórnych dla pojedynczej relacji. Systemy baz danych - Zbyszko Królikowski 9 Indeks wtórny na polu niekluczowym Indeks wtórny jest zakładany najczęściej na polu niekluczowym wiele rekordów w pliku danych może mieć tą samą wartość pola K ( i ) indeksu. Indeks wtórny daje logiczne uporządkowanie rekordów poprzez pole indeksowe. Implementacje indeksu wtórnego na polu niekluczowym: 1. Wiele rekordów indeksowych z tą samą wartością K ( i ) dla różnych rekordów pliku danych. 2. Zastosowanie rekordów indeksowych zmiennej długości, to znaczy, dla danej wartości K ( i ) utrzymywana jest lista wskaźników do odpowiednich bloków danych: < K ( i ), P1 ( i ), P2 ( i ),..., Pk ( i )> 3. Zastosowanie rzadkiego indeksu do bloku wskaźników rekordów. Rekord indeksu ma stałą długość i zawiera pojedynczą wartość indeksowanego pola. Tworzony jest jednak poziom pośredni, tj. blok rekordów wskaźników, dla utrzymania wielu wskaźników do rekordów danych wskaźnik P ( i ) w rekordzie indeksu < K ( i ), P ( i ) > wskazuje na blok wskaźników rekordów. Systemy baz danych - Zbyszko Królikowski 11 Indeks wtórny na polu klucza wtórnego Pole klucza wtórnego zawiera różne wartości dla każdego rekordu w pliku indeks wtórny jest uporządkowany według K ( i ), tak więc można wykonywać przeszukiwanie binarne na indeksie. Indeks wtórny jest indeksem gęstym jednemu rekordowi indeksu odpowiada jeden rekord pliku danych. Ponieważ rekordy pliku danych nie są fizycznie uporządkowane wg wartości klucza wtórnego, nie można wykorzystać rekordu kotwiczącego bloku dlatego rekord indeksu dotyczy jednego rekordu danych, a nie bloku jak to ma miejsce w wypadku indeksu podstawowego. P ( i ) są wskaźnikami do bloków blok musi być wczytany do pamięci operacyjnej i tam dopiero wyszukany odpowiedni rekord. Indeks wtórny wymaga więcej przestrzeni na dysku aniżeli indeks podstawowy. Systemy baz danych - Zbyszko Królikowski 10 Indeks wtórny na polu niekluczowym zastosowanie indeksu rzadkiego Systemy baz danych - Zbyszko Królikowski 12
Indeks wielopoziomowy Cel: zredukowanie czasu przeszukiwania indeksu. Przeszukiwanie binarne wymaga log2bi dostępów do bloków indeksu zajmującego bi bloków każdy krok przeszukiwania redukuje dwukrotnie rozmiar analizowanego indeksu. W przypadku indeksu wielopoziomowego, w każdym kroku redukujemy bfri krotnie rozmiar analizowanego indeksu. (bfri - współczynnik blokowania: liczba rekordów w bloku) przeszukiwanie indeksu wielopoziomowego wymaga średnio logbfribi dostępów do bloków pliku indeksowego. W ramach indeksu wielo poziomowego wyróżnia się I poziom indeksu (base level) (uporządkowany plik indeksowy z różnymi wartościami K ( i )) oraz II poziom indeksu (top level), który jest indeksem podstawowym dla poziomu I. II poziom ma po jednym rekordzie (dotyczącym rekordu kotwiczącego) dla każdego bloku indeksów z poziomu I. Indeksy wielopoziomowe można konstruować z wykorzystaniem indeksów podstawowych, wtórnych i zgrupowanych, pod warunkiem, że indeks I poziomu ma różne wartości dla K ( i ) i rekordy stałej długości. Systemy baz danych - Zbyszko Królikowski 13 Indeks wielopoziomowy Problem: wstawianie i usuwanie rekordów (np. wstaw rekord K = 45) pociąga za sobą konieczność modyfikacji indeksu Rozwiązanie: pozostawienie w blokach pliku indeksowego wolnej przestrzeni Indeks taki nazywamy dynamicznym indeksem wielopoziomowym Najczęściej spotykana implementacja: struktury typu B drzewo lub B+ - drzewo. Systemy baz danych - Zbyszko Królikowski 15 Indeks wielopoziomowy Systemy baz danych - Zbyszko Królikowski 14 Dynamiczny indeks wielopoziomowy typu drzewo B-drzewa są specjalnym przypadkiem drzewowej struktury danych Drzewo składa się z wierzchołków (węzłów) (nodes). Każdy węzeł (z wyjątkiem korzenia) ma jeden węzeł rodzica i zero lub więcej węzłów dzieci. Węzeł, który nie ma dzieci jest nazywany liściem. Węzły nie-liście są nazywane węzłami wewnętrznymi. Poddrzewo wierzchołka składa się z tego wierzchołka i wszystkich węzłów następników. Jednym ze sposobów implementacji drzewa jest przechowywanie w węźle tylu wskaźników ile ten węzeł ma dzieci. Czasami w węźle przechowywany jest również wskaźnik do rodzica. Oprócz wskaźników węzły zawierają również dodatkowe informacje, to jest wartości pól indeksowych pliku, które są wykorzystywane do wyszukiwania poszczególnych rekordów. Systemy baz danych - Zbyszko Królikowski 16
Dynamiczny indeks wielopoziomowy typu drzewo Subtree for node B A root node (level 0) B C D nodes at level 1 E F G H I nodes at level 2 J K nodes at level 3 Nodes E, J, C, G, H, and K are leaf nodes of the tree Systemy baz danych - Zbyszko Królikowski 17 Struktura S-drzewa budowa węzła P 1 K 1... K i-1 P i K i... K q-1 P q X X X X < K 1 K i-1 < X < K i K q-1 < X Wyszukując wartość Xi podążamy za wskaźnikiem Pi zgodnie z formułą w warunku (2) definicji powyżej Systemy baz danych - Zbyszko Królikowski 19 S-drzewo S-drzewo (ang. search tree) jest specjalnym typem drzewa, wykorzystywanym do wyszukiwania rekordów, mając daną wartość jednego z jego pól. Indeksy wielopoziomowe w wersji podstawowej mogą być traktowane jako odmiana S-drzewa. S-drzewem rzędu p nazywamy takie drzewo, że każdy wierzchołek tego drzewa posiada co najwyżej p 1 wartości szukanych i p wskaźników do poddrzew w porządku < P1, K1, P2, K2,..., Pq-1, Kq-1, Pq > gdzie q p. Pi jest wskaźnikiem pustym lub wskaźnikiem do podrzewa. W każdej chwili S-drzewo spełnia dwa ograniczenia: dla każdego wierzchołka: K1 < K2 <... < Kq-1; dla wszystkich wartości X w poddrzewie wskazanym przez Pi spełnione są następujące warunki: Ki-1 < X < Ki, dla 1 < i < q X < Ki, dla i = 1 Ki-1 < X, dla i = q Systemy baz danych - Zbyszko Królikowski 18 S-drzewo jako mechanizm wyszukiwania rekordów w pliku Wartości w drzewie mogą być wartościami jednego z pól pliku (pole przeszukiwania search field) Każda wartość w drzewie jest związana ze wskaźnikiem do rekordu, który zawiera tą wartość (alternatywnie wskaźnik może być do bloku zawierającego ten rekord) tree node null tree 5 3 6 9 1 7 8 12 Systemy baz danych - Zbyszko Królikowski 20
S-drzewo jako mechanizm wyszukiwania rekordów w pliku cd. S-drzewo może być pamiętane na dysku przez przypisanie każdemu węzłowi bloku dyskowego Gdy nowy rekord jest wstawiany należy uaktualnić S-drzewo, przez wprowadzenie wartości pola przeszukiwania nowego rekordu i wskaźnika do tego rekordu w S-drzewie Z każdym S-drzewem są związane odpowiednie procedury wstawiania i usuwania wartości nie gwarantują one jednak, że dynamicznie tworzone i modyfikowane S-drzewo jest zrównoważone (zbalansowane), co oznacza, że wszystkie liście znajdują się na tym samym poziomie Utrzymywanie zrównoważenia jest bardzo ważne, ponieważ gwarantuje, że nie będzie węzłów na wysokich poziomach, co wymagałoby dostępu do wielu bloków podczas wyszukiwania Problem usuwania rekordów: może prowadzić do pustych węzłów wymagających pamięci i zwiększających liczbę poziomów Systemy baz danych - Zbyszko Królikowski 21 B-drzewo definicja cd. 4. Każdy wierzchołek ma co najwyżej p wskaźników do poddrzew 5. Każdy wierzchołek, za wyjątkiem korzenia i liści, posiada co najmniej [ ( p / 2 ) ] wskaźników do poddrzew. Korzeń posiada co najmniej 2 wskaźniki do poddrzew, za wyjątkiem sytuacji, gdy jest jedynym wierzchołkiem w grafie. 6. Wierzchołek o q wskaźnikach do poddrzew, q p, posiada q-1 wartości kluczy. 7. Wszystkie liście znajdują się na tym samym poziomie. Liście posiadają strukturę zbliżoną do struktury wierzchołków wewnętrznych liście nie posiadają wskaźników do poddrzew. 8. Dla każdej wartości klucza X w poddrzewie wskazywanym przez wskaźnik Pi spełnione są następujące warunki: Systemy baz danych - Zbyszko Królikowski 23 B-drzewo B-drzewo jest S-drzewem z dodatkowymi ograniczeniami ograniczenia te mają na celu zagwarantowanie, że drzewo jest zrównoważone i że wolna przestrzeń (na skutek usuwania rekordów nie będzie nigdy zbyt duża B-drzewo rzędu p definiujemy następująco: 1. Każdy wierzchołek wewnętrzny posiada następującą strukturę: < P1, ( K1, Pr1 ), P2, ( K2, Pr2),..., ( Kq-1, Prq-1 ), Pq > gdzie q p. Pi jest wskaźnikiem do poddrzewa. Pri jest wskaźnikiem do bloku danych zawierających rekord o wartości klucza Ki. 2. Dla każdego wierzchołka K1 < K2 <... < Kq-1 3. Dla każdej wartości klucza X w poddrzewie wskazywanym przez wskaźnik Pi spełnione są następujące warunki: Ki-1 < X < Ki, dla 1 < i < q X < Ki, dla i = 1 Ki-1 < X, dla i = q Systemy baz danych - Zbyszko Królikowski 22 B-drzewo P K Pr K Pr P K Pr 1 1 1... i-1 i-1 i i... K Pr q-1 q-1 P q tree data data tree data tree X X X X < K 1 K i-1 < X < K i K q-1 < X Węzeł B-drzewa z q-1 wartościami pola przeszukiwań tree node data null tree 5 8 1 3 6 7 9 12 Wartości pola przeszukiwań były wprowadzane w nastepującej kolejności: 8, 5, 1, 7, 3, 12, 9, 6 Systemy baz danych - Zbyszko Królikowski 24 i
B+-drzewo Wariant B-drzewa najczęściej wykorzystywany w praktyce Inna struktura węzłów pośrednich i liści w liściach wartości i wskaźniki do danych (gdy indeks dla pola niekluczowego: wskaźniki do danych wskazują na blok ze wskaźnikami do rekordów) w węzłach pośrednich wartości i wskaźniki do poddrzew (niektóre wartości z liści powtarzają się w węzłach pośrednich) Liście połączone w listę Systemy baz danych - Zbyszko Królikowski 25 B+-drzewo Systemy baz danych - Zbyszko Królikowski 26