Bazy danych wykład ósmy Indeksy Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 1 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 2 / 34
Rekordy tabeli przechowujemy w blokach na dysku. W jednym bloku możemy przechowywać wiele rekordów. Nie zakładamy żadnej zależności między wartościa atrybutów rekordu i jego miejscem na dysku. Bloki pliku możemy traktować jako listę dwukierunkowa. Nagłówek pliku Blok danych Blok danych Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 3 / 34
Nagłówek pliku Blok danych Blok danych Jeśli N to liczba rekordów w tabeli, R rozmiar rekordu, B rozmiar bloku na dysku to liczba zajętych bloków dyskowych D wynosi przynajmniej: N/k, gdzie k = B/R ilość rekordów, które zmieszcza się w jednym bloku. W praktyce trudno osiagn ać takie maksymalne wykorzystanie bloków na dysku. Mniejsze wykorzystanie pojedyńczych bloków zwiększa liczbę operacji I/O podczas pracy BD. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 4 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 5 / 34
Plik nieuporzadkowany Nagłówek pliku Blok danych Blok danych Nie zakładamy żadnej zależności między wartościa atrybutów rekordu i jego miejscem na dysku. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 6 / 34
Operacje na pliku nieuporzadkowanym Nagłówek pliku Blok danych Blok danych Wstawianie możemy wykonać w czasie stałym, jeśli wstawiamy do ostatniego bloku. Wyszukiwanie może wymagać, pesymistycznie, wczytania wszystkich bloków, średnio połowy bloków. Usuwanie wymaga wyszukania odpowiedniego rekordu a potem usunięcia go z danego bloku. Możliwe, że musimy wtedy przeorganizować bloki, jeśli wymagamy ich minimalnego zapełnienia (np. na poziomie 50%). Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 7 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 8 / 34
Pliki uporzadkowane Nagłówek pliku 1, 1, 1, 2, 2,3 3,4,4,5 Pliki w kolejnych blokach uporzadkowane sa zgodnie z wartościami ustalonego zbioru atrybutów. Jeśli interesuja nas inne atrybuty to plik taki musimy traktować jak plik nieuporzadkowany. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 9 / 34
Pliki uporzadkowane Jeśli nasz plik zawiera sasiednie bloki lub stosujemy dodatkowe struktury danych, to wyszukanie rekordu o zadanej wartości atrybutu, po którym plik jest posortowany kosztuje log 2 (D), gdzie D to liczba zajętych bloków (wyszukiwanie binarne). Wstawienie kosztuje nas średnio D/2 gdyż wstawiajac rekord w środku pliku musimy zrobić dla niego miejsce czyli przesunać do przodu rekordy występujace po nim. Podobny problem występuje przy usuwaniu lub modyfikacji pola, po którym plik jest posortowany. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 10 / 34
Pliki uporzadkowane Wysokie koszty operacji wstawiania sprawia, że stosuje się dodatkowy plik, do którego wstawia się nowe rekordy. Co jakiś czas plik ten jest scalany z plikiem głównym. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 11 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 12 / 34
Pliki haszowe Blok, w którym umieszczony będzie rekord wyznaczany jest na podstawie wartości funkcji haszujacej. Pozwala to na efektywne wyszukiwanie, wstawianie i usuwanie rekordów. Problemy powstaja, gdy następuje przepełnienie bloku przeznaczonego dla rekordów o danej wartości funkcji haszujacej. Możliwe rozwiazania to np. druga funkcja haszujaca, umieszczenie nadmiarowych rekordów w dodatkowych blokach Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 13 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 14 / 34
Indeksy Indeksy sa dodatkowa struktura przechowujaca informacje o pliku z tabela. Dzięki tej informacji możemy efektywniej wyszukiwać rekordy w pliku nie zwiększajac kosztów utrzymania pliku w założonej formie (np. uporzadkowanej). Musimy wtedy dbać o aktualizawonie pliku z indeksem indeks jest jednak mniejszy niż cały rekord i możemy efektywnie zaprojektować strukturę danych dla pliku z indeksem (B drzewa). Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 15 / 34
Indeksy Najbardziej czasochłonna operacja w bazie danych jest dostępo do dysku. Wyszukiwanie krotki wymaga przejżenia średnio połowy tabeli. Indeksy zakładane sa na tabelę w celu przyśpieszenia wyszukiwania. Implementowane przez B-drzewa pozwalaja ławiej znaleźć adres na dysku, pod którym znajduje się interesujaca nas krotka. Indeks nakłada dodatkowy koszt na operacje wstawiania do tabeli i modyfikacji. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 16 / 34
Indeksy przykład select * from Przelewy where data= 2011-11-11 and nadawca= Kowalski ; Zbiór wyników takiego zapytania jest istotnie mniejszy niż cała tabela. Nie posiadajac indeksu musielibyśmy jednak przejżeć cała tabelę aby odnaleźć odpowiednie krotki (albo trzymać dane w pliku uporzadkowanym). Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 17 / 34
Indeksy przykład Indeks pozwala nam efektywniej wyszukiwać krotki o danych wartościach atrybutów. Może przyśpieszyć obliczanie złaczeń. Utrzymanie struktury indeksu nakłada dodatkowe koszty na operacje modyfikacji tabeli. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 18 / 34
Indeks oparty na kluczu Często wyszukujemy krotki w oparciu o klucz relacji. Indeks na kluczu relacji pozwala odnaleźć jedna krotkę zamiast przegladania całej relacji koszt dostępu wynosi wtedy: koszt przejrzenia indeksu + O(1). Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 19 / 34
Indeks na kluczu przykład select data_urodzenia from Ksiazki, Autorzy where tytul= Cyberiada and Ksiazki.author_id = Autorzy.id; Jeżeli mamy założony indeks na atrybut tytul w tabeli Ksiazki, to możemy szybko wyszukać rekord ksiażki Cyberiada. Następnie, jeśli mamy indeks na id w tabeli Autorzy, to łatwo znajdziemy rekord z autorem Cyberiady. Sprawdzenie jego wieku wykona sie w czasie stałym plus koszt przejżenia indeksu. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 20 / 34
Kiedy indeks na kluczu jest nieprzydatny przykład Załóżmy, że mamy nieposortowany plik z tabela Ksiazki z założonym indeksem na pola (tytul, rok_wydania). Wykonujemy zapytanie: select * from Ksiazki where rok_wydania = 2000; Jeśli w większości bloków znajduja się ksiazki wydane w roku 2000 to oczywiście i tak musimy odczytać wszystkie bloki w pliku. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 21 / 34
Rodzaje indeksów Ze względu na rodzaj atrybutu, na którym założony jest indeks dzielimy indeksy na: indeks podstawowy założony na atrybucie porzadkuj acym plik i unikalnym, indeks zgrupowany założony na atrybucie porzadkuj acym plik lecz nie unikalnym, indeks wtórny założony na atrybucie nieporzadkuj acym. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 22 / 34
Rodzaje indeksów Ze względu na rodzaj atrybutu, na którym założony jest indeks dzielimy indeksy na: indeks podstawowy założony na atrybucie porzadkuj acym plik i unikalnym, indeks zgrupowany założony na atrybucie porzadkuj acym plik lecz nie unikalnym, indeks wtórny założony na atrybucie nieporzadkuj acym. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 23 / 34
Rodzaje indeksów Ze względu na wskazywane przez indeks rekordy, możemy podzielić je na: indeks gęsty posiada wskaźniki do każdego rekordu w tabeli, indeks rzadki posiada wskaźniki tylko do niektórych rekordów. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 24 / 34
Indeks o kluczu złożonym Indeks możemy nałożyć na parę (lub więcej atrybutów). Indeks nałożony na atrybuty (A,B) pozwala wyszukiwać rekordy o danej wartości obu atrbybutów ale pozwala także wyszukać rekordy o danej wartości atrybutu A. Indeks nałożony na parę atrybutów jest efektywniejszy przy wyszukiwaniu po obu atrybutach ale mniej elastyczny jak dwa indeksy pojedyńcze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 25 / 34
Indeks o kluczu złożonym przykład Indeks nałożony na pare (nazwisko, imie) pozwoli efektywnie wyszukać krotki dla (Kowalski, Jan) pozwoli także wyszukać wszystkich Kowalskich. O rekordach takiego indeksu możemy myśleć jako o trójkach (nazwisko, imie, adres) i uporzadkowanych według pary atrybutów (nazwisko, imie). Indeks ten nie pozwoli wyszukać wszystkich Janów. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 26 / 34
Outline 1 Podstawowe typy organizacji plików Pliki nieuporzadkowane Pliki uporzadkowane Pliki haszowe 2 Indeksy Sposoby realizacji indeksu Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 27 / 34
Struktura pliku indeksu Rekordy pliku indeksu zawieraja dwa atrybuty: pole z wartościa indeksowanego atrybutu, pole z adresem bloku na dysku, w którym znajduje się dana krotka (lub krotki). Ponieważ rekordy indeksu sa (z reguły) mniejsze niż rekordy tabeli, dla której go zakładamy dostęp do nich wymaga mniej operacji I/O. Mamy też większe szanse, że indeks bedziemy mogli trzymać w całości w pamięci operacyjnej. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 28 / 34
Indeks jako plik uporzadkowany Najprostsza realizacja jest indeks jako plik uporzadkowany według atrybutów, dla których stworzyliśmy indeks. Plik taki ma postać: (klucz1, adr1), (klucz2, adr2),..., (kluczn, adrn), gdzie klucz1< klucz2 <... < kluczn a plik zajmuje spójny fragment dysku. Ponieważ rekordy indeksu sa mniejsze od rekordów tabeli, dla której tworzymy indeks przechowanie pliku indeksu w jednym, spójnym fragmencie dysku jest mniej kłopotliwe. Podobnie jeden blok na dysku zawiera wiecej rekordów indeksu niż zawierałby rekordów oryginalnej tabeli szybciej możemy wczytać cały indeks. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 29 / 34
Indeks jako plik uporzadkowany Wyszukanie rekordu o zadanej wartości na polu indeksowanym trwa wtedy O(log 2 (N)), gdzie N to liczba rekordów w tabeli (wyszukiwanie binarne). Koszt wstawienia rekordu do tabeli jest zwiększony o koszt uaktualnienia indeksu. Ten koszt to O(N) ale ponieważ plik indeksu zajmuje mniej bloków niż plik tabeli i tak jest on mniejszy niż koszt utrzymawania jako uporzadkowanego całego pliku. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 30 / 34
B drzewa B-drzewa i ich warianty sa najbardziej efektywna struktura implementacji indeksu. Zapewniaja niski koszt operacji wstawiania do indeksu oraz wyszukiwania w indeksie - rzędu O(log C (N)), gdzie N to liczba rekordów w tabeli a C jest duża stała. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 31 / 34
B drzewa Załóżmy, że mamy indeks założony na atrybucie, którego wartościami sa liczby naturalne.x Jeden węzeł (rekord) B drzewa zawiera tablicę o postaci (wskaźnik0, wartość1, wskaźnik1, wartość2,..., wartośćn, wskaźnikn) 51 12 46 62 91 1 5 7 38 45 47 48 53 55 68 78 92 97 Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 32 / 34
B drzewa Każdy węzeł drzewa jest wypełniony w przynajmniej 50% (z wyjatkiem korzenia). Na ostatnim poziomie drzewa węzły zawieraja adresy miejsc na dysku rekordów z odpowienimi wartościami. Wyszukiwanie kosztuję tyle co przejście ścieżki od korzenia do liścia. Podobny jest koszt implementacji wstawiania i usuwania z B drzewa musimy dbać, żeby struktura drzewa była zrównoważona. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 33 / 34
B + drzewa W B + drzewach liście tworza listę dwukierunkowa (połaczenia te nie sa narysowane). Ułatwia to wyszukanie rekordów o wartościach z zadanego przedziału. 51 12 46 62 91 1 5 7 38 45 47 48 53 55 68 78 92 97 Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy Wyszyńskiego, danych wykład Warszawa) ósmy Indeksy 34 / 34