Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

INDEKSY I SORTOWANIE ZEWNĘTRZNE Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill,

Podobne prezentacje


Prezentacja na temat: "INDEKSY I SORTOWANIE ZEWNĘTRZNE Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill,"— Zapis prezentacji:

1 INDEKSY I SORTOWANIE ZEWNĘTRZNE Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka i slidey). 2.Lech Banachowski, Krzysztof Stencel, Systemy zarzadzania bazami danych, Wydawnictwo PJWSTK, Dokumentacja Oracle.

2 2 PJWSTK, L.Banachowski, SZB Organizacje pliku z danymi v Plik nieuporządkowany v Plik uporządkowany (posortowany) v Plik haszowany

3 3 PJWSTK, L.Banachowski, SZB Wyszukiwanie Najczęściej wykonywaną operacją w bazie danych jest wyszukiwanie danych. W najprostszej postaci: mając konkretną wartość poszukujemy rekordów, w których ta wartość występuje w danym polu.

4 4 PJWSTK, L.Banachowski, SZB Indeksy v Plik nieuporządkowany umożliwia wyszukanie rekordu: – mając rid rekordu, lub – przeglądając sekwencyjnie wszystkie rekordy w pliku. v Często wyszukiwanie na podstawie wartości jednego lub więcej pól, np. – wyznacz wszystkich studentów specjalizacji BD, – wyznacz wszystkich studentów mających < 20 lat. v Indeksy są strukturami danych, których celem jest wspomaganie szybkiego znajdowania odpowiedzi na takiego rodzaju zapytania. v Takie samo znaczenie jak skorowidz (indeks) w książce!

5 5 PJWSTK, L.Banachowski, SZB Indeksy v Klucz wyszukiwania dla indeksu – wybrane pola rekordu względem których ma odbywać się wyszukiwanie. v Indeks składa się z : –pozycji danych k* określanych względem wartości klucza wyszukiwania k, oraz z –pozycji indeksu, kierujących wyznaczeniem właściwej pozycji danych k* w oparciu o wartość klucza wyszukiwania.

6 6 PJWSTK, L.Banachowski, SZB Indeksy v Plik danych – rekordy danych. v Plik indeksu – pozycje danych, pozycje indeksu. v Indeks wewnętrzny - plik indeksu zawiera w sobie plik danych. Pozycjami danych k* w indeksie są rekordy danych. v Indeks zewnętrzny – plik indeksu jest rozłączny z plikiem danych. Pozycje danych k* zawierają wskaźniki do rekordów danych. Postacie: 1. albo 2. –Ad 2. Postać bardziej zwarta; zmienny format rekordu.

7 7 PJWSTK, L.Banachowski, SZB Klasyfikacja indeksów v Gdy klucz wyszukiwania zawiera klucz główny – indeks główny wpp. indeks niegłówny. v Indeks jednoznaczny - klucz wyszukiwania zawiera klucz jednoznaczny. v Indeks pogrupowany - indeks wewnętrzny i plik danych posortowany według wartości klucza indeksu.

8 8 PJWSTK, L.Banachowski, SZB Indeks pogrupowany v Pozycje danych (czyli rekordy danych) są zapisane w kolejności uporządkowanej względem wartości klucza indeksu. W rezultacie, rekordy o tej samej wartości klucza lub zbliżonej znajdują się na tej samej stronie lub na kilku powiązanych.

9 9 PJWSTK, L.Banachowski, SZB Indeksy wewnętrzne i zewnętrzne v Indeks wewnętrzny haszowany = indeks wewnętrzny i plik danych haszowany. v Indeks wewnętrzny -> –Plik danych posortowany i indeks pogrupowany, albo –Plik danych haszowany i indeks haszowany. v Indeks zewnętrzny -> –Plik danych nieuporządkowany, albo –Plik danych posortowany, albo –Plik danych haszowany.

10 10 PJWSTK, L.Banachowski, SZB Złożone klucze wyszukiwania v Złożone klucze wyszukiwania: kombinacja pól np.. – Zapytanie równościowe: u age=20 and sal =75 – Zapytanie zakresowe: u age 10 v Porządek leksykograficzny. sue1375 bob cal joe nameagesal 12,20 12,10 11,80 13,75 20,12 10,12 75,13 80, Rekordy danych posortowane Pozycje danych posortowane Pozycje danych posortowane

11 11 PJWSTK, L.Banachowski, SZB Pseudo-wartość NULL v Indeksowane są wszystkie wiersze, w których co najmniej jedna składowa klucza wyszukiwania indeksu nie jest NULL. v Na przykład, za pomocą indeksu na kolumnie Comm nie można zrealizować wyszukiwania wierszy z nieokreśloną wartością w polu Comm : v SELECT Ename FROM Emp WHERE Comm IS NULL; v Można … WHERE Comm IS NOLL NULL; v Ograniczenie to nie dotyczy indeksów bitmapowych i klastrowych.

12 Wyszukiwanie zakresowe – plik posortowany v " Wyznacz studentów ze średnią > 4.0" – Gdy dane w pliku posortowanym: u wyszukiwanie binarne aby znaleźć pierwszego takiego studenta; u przejdź plik wypisując pozostałych takich studentów. –Plik indeksu k1< k2< …

13 Strona indeksu Statyczne drzewo ISAM ( indexed sequential access method ) * W liściach są pozycje danych. P 0 K 1 P 1 K 2 P 2 K m P m Pozycja indeksu Węzły wewnętrzne Strony główne Liści e Strony nadmiarowe 1 K < K …. < K 2m

14 Drzewo ISAM 10*15*20*27*33*37*40* 46* 51* 55* 63* 97* Korzeń

15 Wstawiamy 23*, 48*, 41*, 42*... 10*15*20*27*33*37*40* 46* 51* 55* 63* 97* Korzeń 23* 48* 41* 42* Strony nadmiarowe Strony indeksu Strony główne

16 B+ drzewo v Wstawianie/usuwanie w czasie rzędu log N; drzewo wyważone względem wysokości. ( N = # liści) v Każdy węzeł (z wyjątkiem ewentualnie korzenia) zawiera d <= m <= 2 d pozycji indeksu. Parametr d - stopień drzewa. v Zapytania równościowe i zakresowe. Pozycje indeksu Pozycje danych

17 B+ drzewo v Wyszukiwanie zaczyna się w korzeniu a porównania klucza wyszukiwania prowadzą do liścia tak jak dla ISAM. v Wyszukiwanie 5*, 15*, >= 24*... * Na podstawie wyniku wyszukiwania 15*, wiemy że 15* nie ma w drzewie Korzeń * 3*5* 7*14*16* 19*20*22*24*27* 29*33*34* 38* 39* 13

18 Drzewa B+ w praktyce v Średni stopień d=100. Średnie zapełnienie: 67%. v Typowa pojemność: – Wysokość 4: = 312,900,700 rekordów – Wysokość 3: = 2,352,637 rekordów v Zwykle górne poziomy drzewa w cache: – Poziom 1 = 1 strona = 8 KB – Poziom 2 = 133 strony = 1 MB – Poziom 3 = 17,689 strony = 133 MB

19 Wstawienie pozycji danych do B+ drzewa v Wyznacz odpowiedni liść L. v Wstaw pozycję danych do L. – Jeśli mieści się – to koniec ! – Wpp, podziel L (na L i nowy węzeł L2) u Rozdziel równo pozycje, skopiuj na wyższy poziom środkowy klucz (najmniejszy w prawym węźle L2 ). u Do ojca L wstaw pozycję indeksu z tym kluczem i wskaźnikiem wskazującym na L2. v W razie potrzeby powtórz krok podziału rekurencyjnie. v Kroki podziału mogą dojść do korzenia i w rezultacie drzewo może zwiększyć swoją wysokość o jeden.

20 Wstawianie 8* 2* 3*5* 7* 8* 5 Pozycja wstawiana do ojca jest kopiowana Podział liścia Podział węzła wewnętrznego Pozycja wstawiana do ojca jest przesuwana w górę.

21 Drzewo po wstawieniu 8* v Poprzedni korzeń uległ podziałowi. Wysokość drzewa zwiększyła się o 1. v Możliwa redystrybucja pozycji danych w poziomie nie jest w praktyce realizowana. 2*3* Korzeń *16* 19*20*22*24*27* 29*33*34* 38* 39* 135 7*5*8*

22 22 PJWSTK, L.Banachowski, SZB B+ drzewo jako indeks wewnętrzny i zewnętrzny v Indeks może być wewnętrzny i wtedy pozycje danych pokrywają się z rekordami danych, tzn. rekordy danych są zapisywane w strukturze B+ drzewa zgodnie z porządkiem klucza wyszukiwania. Z tego powodu jest to wtedy indeks pogrupowany. v Albo indeks jest zewnętrzny i wtedy rekordy z danymi są przechowywane poza indeksem w dowolnym porządku (dla plików nieuporządkowanych, posortowanych i haszowanych).

23 23 PJWSTK, L.Banachowski, SZB Strategia zastępowania ramek dla stron B+ drzewa LRU nie jest tu dobrą metodą! Korzeń drzewa i najwyższe poziomy dobrze jest trzymać cały czas w pamięci RAM.

24 24 PJWSTK, L.Banachowski, SZB Dodatkowe operacje na B+ drzewach v Gdy ilość zajętego miejsca w drzewie spada poniżej pewnego progu, możliwe: – REBUILD utworzenie indeksu od nowa – COALESCE połączenie ze sobą sąsiednich stron o zajętości poniżej 50%. v Gdy na samym początku mamy dany duży zbiór rekordów, to wtedy zamiast powtarzania kolejnych operacji INSERT opłaca się zastosować algorytm Bulk Loading, którego działanie polega na posortowaniu pliku rekordów z danymi, a następnie dobudowaniu nad posortowanym ciągiem kolejnych poziomów indeksowych drzewa B+.

25 25 PJWSTK, L.Banachowski, SZB Dlaczego nie używamy B-drzew? Dla pełności tematu pokazujemy schemat węzła zwykłego B-drzewa (bez plusa).

26 Podsumowanie drzew v Zastosowanie indeksów o strukturze drzewa: –Wyszukiwanie zakresowe. –Wyszukiwanie równościowe. –Sortowanie (np. ORDER BY). v ISAM – struktura statyczna. – Modyfikowane są tylko liście. – Wymagane są strony nadmiarowe – mogące istotnie pogorszyć działanie algorytmów. v B+ drzewo – struktura dynamiczna. – W praktyce wysokość zwykle <=4.

27 Indeks haszowany v Ustalona alokacja stron głównych; alokowane dodatkowe strony nadmiarowe w razie potrzeby. v h (k) np. = k mod M = segment do którego należy pozycja danych k* o kluczu k ( M = # segmentów). h(klucz) h klucz Strony główne Strony nadmiarowe 1 0 M-1 Plik: nieuporządkowany, posortowany i haszowany.

28 28 PJWSTK, L.Banachowski, SZB Indeks haszowany z uporządkowanymi segmentami Wariant w którym pozycje danych są uporządkowane względem wartości klucza wyszukiwania.

29 Podsumowanie haszowania v Mogą powstać długie łańcuchy nadmiarowych stron co prowadzi do pogorszenia działania: – konieczność okresowego wykonywan ia operacji REBUILD, – istnieją dynamiczne wersje haszowania – polegające na zwiększaniu liczby M segmentów przez ich podział. v Indeksy haszowane dobre przy wyszukiwaniu równościowym. Nie wspomagają wyszukiwania zakresowego ani sortowania.

30 30 PJWSTK, L.Banachowski, SZB Podsumowanie indeksu wewnętrznego v Dla jednej tabeli może być zbudowany tylko jeden indeks wewnętrzny i wiele indeksów zewnętrznych względem różnych kluczy wyszukiwania. v W indeksie wewnętrznym zbudowanym na B+ drzewie rekordy z danymi są zapisywane na stronach reprezentujących liście drzewa. W indeksie haszowanym wewnętrznym rekordy z danymi są zapisywane na stronach segmentów. W obu przypadkach z definicji algorytmów wstawiania i usuwania wynika, że rekordy mogą być przesuwane między stronami. To znaczy, rekordy mogą zmieniać stronę a zatem nie może być do nich z zewnątrz bezpośrednich wskaźników używających identyfikatora strony. Za identyfikator rekordu używa się wtedy wartość jego klucza głównego a dostęp do rekordu jest zawsze realizowany poprzez indeks główny.

31 31 PJWSTK, L.Banachowski, SZB Indeks wewnętrzny – 2 przypadki v Indeks główny jest indeksem wewnętrznym. Wtedy wyszukiwanie rekordu według wartości klucza wyszukiwania indeksu zewnętrznego wymaga przejścia dwóch indeksów: najpierw zewnętrznego, w którym znajdujemy wartość klucza głównego szukanego rekordu, a następnie indeksu wewnętrznego głównego, w którym w oparciu o wartość klucza głównego znajdujemy szukany rekord. v Indeks główny jest indeksem zewnętrznym, w którego pozycjach danych są zapisywane (zmienne) wskaźniki do rekordów. Przy wyszukiwaniu rekordu przechodzimy tak jak poprzednio dwa indeksy: zewnętrzny i główny. Natomiast przy zmianach położenia rekordu w indeksie wewnętrznym wymagane jest znalezienie pozycji danych tego rekordu w indeksie głównym i zapisanie w niej nowego adresu tego rekordu.

32 32 PJWSTK, L.Banachowski, SZB Struktury danych wielowymiarowe Siatka (ang. grid file) – podział obszaru wyszukiwań, powiedzmy leżącego na płaszczyźnie, poziomymi i pionowymi liniami na prostokąty. Punkty trafiające do jednego prostokąta są zapisywane w jednym segmencie. Gdy segmenty się przepełnią, można albo stosować strony nadmiarowe albo dzielić prostokąty na mniejsze zwiększając liczbę segmentów.

33 33 PJWSTK, L.Banachowski, SZB Struktury danych wielowymiarowe v Dzielona funkcja haszowana (ang. partitioned hash function ): v H(v1,...,vn)=h1(v1)&h2(v2)&....&hn(vn) v Wartością funkcji haszującej dla układu wartości jest konkatenacja tekstowa wartości funkcji haszujących dla poszczególnych składowych.

34 34 PJWSTK, L.Banachowski, SZB Drzewa wielowymiarowe v R drzewa są uogólnieniem B drzew do n wymiarów. Pozycją danych w takim drzewie jest para złożona z n- wymiarowej kostki: {(v1,...,vn): ai<=vi<=bi dla 1<=i<=n} oraz adresu pewnego obiektu geometrycznego, który jest jednoznacznie ograniczony tą kostką. v Podobnie pozycją indeksu jest taka kostka oraz wskaźnik do węzła niższego poziomu, w którego poddrzewie znajdują się wyłącznie obiekty zawarte w tej kostce i w żadnym innym poddrzewie takie obiekty nie występują.

35 35 PJWSTK, L.Banachowski, SZB Powtórzenie Plik danych – sk ł adowanie danych nieuporządkowany uporządkowany (posortowany) haszowany Indeks – wyszukiwanie danych i jednoznaczno ś ć kluczy wewnętrzny - pozycja danych = rekord danych zewnętrzny – pozycja danych = wskaźnik do rekordu danych pogrupowany – wewnętrzny & plik danych uporządkowany wed ł ug warto ś ci klucza indeksu B+ drzewo tablica haszowana (jako indeks wewnętrzny lub zewnętrzny)

36 Zastosowania sortowania w bazach danych v ORDER BY - dane są wymagane w pewnym porządku. v Budowa indeksu - początkowego B+ drzewa dla wczytywanego zbioru rekordów. v Złączanie tabel metodą Sort-merge. v Realizacja DISTINCT, GROUP BY, UNION, EXCEPT - alternatywą haszowanie. Problem: posortować 1GB danych za pomocą 10MB RAM.

37 Sortowanie zewnętrzne (wielofazowe przez scalanie) v Faza 0 – sortowanie rekordów w ramach stron: Wczytaj stronę, posortuj ją, zapisz na dysku. v Faza 1,2,3 …, itd: scalaj uporządkowane podpliki w większe uporządkowane podpliki aż cały plik zostanie uporządkowany. Bufory w RAM Wejście 1 Wejście 2 Wyjście Dysk

38 Sortowanie wielofazowe przez scalanie v W każdej fazie odczytujemy i zapisujemy każdą stronę w pliku. v N = # stron => # faz = v Całkowity koszt = 2 N log N v Idea: Dziel i rządź: sortuj podpliki i je scalaj. v Zamiast dwóch buforów można użyć więcej. v Praktycznie liczba faz <=3. Plik wejściowy Faza 0 Faza 1 Faza 2 Faza 3 9 3,4 6,2 9,48,75,63,1 2 3,45,62,64,97,8 1,32 2,3 4,6 4,7 8,9 1,3 5,62 2,3 4,4 6,7 8,9 1,2 3,5 6 1,2 2,3 3,4 4,5 6,6 7,8

39 Sortowanie za pomocą B+ drzewa v Warunek: Tabela ma indeks na B+ drzewie względem kolumn sortowania. v Idea: Przejść po liściach indeksu. v Czy jest to dobra metoda? v Przypadki: – Indeks pogrupowany Bardzo dobra! – Indeks nie pogrupowany Może być bardzo zła!

40 Wewnętrzny indeks pogrupowany v Od korzenia przejdź do skrajnie lewego liścia a następnie sekwencyjnie w prawo po liściach. * Zawsze lepsze od sortowania zewnętrznego! Rekordy danych w pozycjach danych! Indeks Pozycje danych

41 Indeks niepogrupowany v Ogólnie, jedna operacja We/Wy na rekord danych! Rekordy danych Indeks Pozycje danych

42 42 PJWSTK, L.Banachowski, SZB Indeksy w Oracle Indeks oparty na B+ drzewie Tabela połączona z indeksem opartym na B+ drzewie Indeks oparty na B+ drzewie z odwróconymi wartościami kluczy Indeks oparty na klastrze jednej lub więcej tabel (B+ drzewo lub hasz), indeks haszowany Indeks z pozycjami określonymi za pomocą wyrażeń Indeks bitmapowy – implementacja dwa B+ drzewa

43 43 PJWSTK, L.Banachowski, SZB Plik nieuporz ą dkowany - bez indeksu wewnętrznego - indeks zewnętrzny oparty na B+ drzewie v Pozycja danych składa się z wartości indeksowanych kolumn oraz z identyfikatora ROWID wiersza w tabeli - określającego fizyczne położenie danego wiersza na dysku. Umożliwia: – znalezienie wiersza w oparciu o wartość klucza wyszukiwania, – realizację zapytań zakresowych. v Przy wykonywaniu zapytania system używa indeksu opartego na B+ drzewie tylko wtedy gdy jest zapewniona wystarczająca selektywność wyszukiwania, powiedzmy zwracane zostaje co najwyżej 5 do 10% wszystkich rekordów w pliku. v Indeks zewnętrzny oparty na B+ drzewie jest automatycznie tworzony dla każdego klucza głównego i jednoznacznego.

44 44 PJWSTK, L.Banachowski, SZB Tabela połączona z indeksem głównym opartym na B+ drzewie v Pozycjami danych indeksu głównego są rekordy pliku tzn. wiersze tabeli są trzymane w indeksie. Jest zapewniony bardzo szybki dostęp do wierszy przez wartości klucza głównego. v Wiersze nie posiadają swoich identyfikatorów ROWID – identyfikacja wierszy przebiega wyłącznie przez wartości klucza głównego; w pozostałych indeksach wynikiem wyszukania jest wartość klucza głównego – a nie ROWID. Odpowiada to koncepcji indeksu pogrupowanego - ale budowanego tylko dla klucza głównego. v Budując osobno perspektywę zmaterializowaną można jej nadać inną organizację.

45 45 PJWSTK, L.Banachowski, SZB Załóżmy, że chcemy dokonywać analizy klientów wyszukując klientów mieszkających w określonym mieście. Miasta(Id_miasta, Nazwa_miasta) Klienci(Id_miasta, Id_klien_w_miescie, Nazwisko, Hobby, Wiek) Jeśli tabela Klienci jest połączona z indeksem na swoim kluczu głównym, istotnie można przyśpieszyć wykonywanie zapytań w rodzaju: SELECT K.Nazwisko,.Hobby FROM Klienci K INNER JOIN Miasta M ON K.Id_miasta = M.Id_miasta WHERE M.Nazwa_miasta = 'WARSZAWA' AND K.Wiek BETWEEN 18 and 25; Tabela połączona z indeksem opartym na B+ drzewie

46 46 PJWSTK, L.Banachowski, SZB Tworzenie t abeli połączonej z indeksem opartym na B+ drzewie CREATE TABLE Klienci( Id_miasta INTEGER, Id_klien_w_miescie INTEGER, Nazwisko VARCHAR2(80), Hobby VARCHAR(20), Wiek INTEGER, CONSTRAINT Klienci_pk PRIMARY KEY (Id_miasta, Id_klien_w_miescie), CONSTRAINT Klienci_fk FOREIGN KEY(Id_miasta) REFERENCES Miasta ) ORGANIZATION INDEX;

47 47 PJWSTK, L.Banachowski, SZB Indeks haszowany Przykład zastosowania indeksu haszowanego dla klucza głównego Id_konta tabeli: Konta(Id_konta, Saldo, Imie, Nazwisko, Adres) Zakładamy, że tabela Konta zawiera bardzo dużo wierszy oraz że często wielu kasjerów w banku równocześnie wykonuje zapytanie: SELECT * FROM Konta k WHERE k.Id_konta = :numer;

48 48 PJWSTK, L.Banachowski, SZB Tworzenie indeksu haszowanego CREATE CLUSTER Klast_konta(Id_konta INTEGER) SIZE 512 SINGLE TABLE HASHKEYS HASH IS mod(Id_konta, ); - lub HASH IS Id_konta Następnie definiujemy tabelę Konta: CREATE TABLE Konta(Id_konta INTEGER PRIMARY KEY, Saldo NUMBER, Imie VARCHAR2(20), Nazwisko VARCHAR2(50), Adres VARCHAR2(70)) CLUSTER Klast_konta(Id_konta);

49 49 PJWSTK, L.Banachowski, SZB Tworzenie indeksu haszowanego v Indeks klastra jest tworzony automatycznie. v Parametr SIZE w definicji klastra określa ilość miejsca w bajtach przeznaczoną do zapisania rekordów z tą samą wartością klucza klastra. Domyślną wartością (gdy brak klauzuli SIZE) jest rozmiar strony dyskowej. Jeśli wszystkie wiersze dla danej wartości klucza klastra nie mieszczą się w jednym bloku, są zapisywane na liście nadmiarowych bloków. Poprzez dobór odpowiedniej wartości SIZE można spowodować, że wszystkie rekordy z daną wartością klucza znajdą się na tej samej lub tylko na kilku stronach dyskowych.

50 50 PJWSTK, L.Banachowski, SZB Sortowanie segmentów haszowanych CREATE CLUSTER call_detail_cluster ( telno NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT ) HASHKEYS HASH IS telno SIZE 256; CREATE TABLE call_detail ( telno NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT, other_info VARCHAR2(30) ) CLUSTER call_detail_cluster ( telno, call_timestamp, call_duration ); Wyświetlić rozmowy wykonane z danego numeru w kolejności od najwcześniejszego. SELECT * WHERE telno = ORDER BY call_timestamp;

51 51 PJWSTK, L.Banachowski, SZB Przykład - słaba selektywność SELECT E.Ename FROM Emp E WHERE E.Job=:job; - ewentualnie z ORDER BY E.Ename 1.Klaster (indeks) haszowany z kluczem Emp.Job lub Emp(Job, Ename) – sortowane segmenty 2.Tabela połączona z indeksem głównym: Emp (Job, Empno, …) lub Emp (Job, Empno, Ename, …) 3.Zwykły indeks na E.Job może być zły ze względu na słabą selektywność 4.Indeks bitmapowy na E.Job


Pobierz ppt "INDEKSY I SORTOWANIE ZEWNĘTRZNE Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill,"

Podobne prezentacje


Reklamy Google