indeksy i sortowanie zewnĘtrzne

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

Upload: neila

Post on 13-Jan-2016

46 views

Category:

Documents


5 download

DESCRIPTION

INDEKSY I SORTOWANIE ZEWNĘTRZNE. Przygotowa ł Lech Banachowski na podstawie: Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (ksi ążka i slide’y). Lech Banachowski, Krzysztof Stencel, Systemy zarzadzania bazami danych, Wydawnictwo PJWSTK, 2007. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: INDEKSY I SORTOWANIE ZEWNĘTRZNE

INDEKSY I SORTOWANIE ZEWNĘTRZNE

Przygotował Lech Banachowski na podstawie: 1. Raghu Ramakrishnan, Johannes Gehrke, Database Management

Systems, McGrawHill, 2000 (książka i slide’y). 2. Lech Banachowski, Krzysztof Stencel, Systemy zarzadzania bazami

danych, Wydawnictwo PJWSTK, 2007.3. Dokumentacja Oracle.

Page 2: INDEKSY I SORTOWANIE ZEWNĘTRZNE

2PJWSTK, L.Banachowski, SZB

Organizacje pliku z danymi

Plik nieuporządkowany Plik uporządkowany (posortowany) Plik haszowany

Page 3: INDEKSY I SORTOWANIE ZEWNĘTRZNE

3PJWSTK, 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.

Page 4: INDEKSY I SORTOWANIE ZEWNĘTRZNE

4PJWSTK, L.Banachowski, SZB

Indeksy Plik nieuporządkowany umożliwia wyszukanie rekordu:

– mając rid rekordu, lub

– przeglądając sekwencyjnie wszystkie rekordy w

pliku.

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.

Indeksy są strukturami danych, których celem jest

wspomaganie szybkiego znajdowania odpowiedzi na

takiego rodzaju zapytania.

Takie samo znaczenie jak skorowidz (indeks) w książce!

Page 5: INDEKSY I SORTOWANIE ZEWNĘTRZNE

5PJWSTK, L.Banachowski, SZB

Indeksy

Klucz wyszukiwania dla indeksu

– wybrane pola rekordu względem których ma

odbywać się wyszukiwanie.

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.

Page 6: INDEKSY I SORTOWANIE ZEWNĘTRZNE

6PJWSTK, L.Banachowski, SZB

Indeksy

Plik danych – rekordy danych. Plik indeksu – pozycje danych, pozycje indeksu. Indeks wewnętrzny - plik indeksu zawiera w

sobie plik danych. Pozycjami danych k* w indeksie są rekordy danych.

Indeks zewnętrzny – plik indeksu jest rozłączny z plikiem danych. Pozycje danych k* zawierają wskaźniki do rekordów danych. Postacie:1. <k, rid rekordu z tą wartością klucza k> albo <k, lista rid rekordów z tą wartością klucza k >– Ad 2. Postać bardziej zwarta; zmienny format rekordu.

Page 7: INDEKSY I SORTOWANIE ZEWNĘTRZNE

7PJWSTK, L.Banachowski, SZB

Klasyfikacja indeksów

Gdy klucz wyszukiwania zawiera klucz

główny – indeks główny wpp. indeks

niegłówny.

Indeks jednoznaczny - klucz wyszukiwania

zawiera klucz jednoznaczny.

Indeks pogrupowany - indeks wewnętrzny i

plik danych posortowany według wartości

klucza indeksu.

Page 8: INDEKSY I SORTOWANIE ZEWNĘTRZNE

8PJWSTK, L.Banachowski, SZB

Indeks pogrupowany

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.

Page 9: INDEKSY I SORTOWANIE ZEWNĘTRZNE

9PJWSTK, L.Banachowski, SZB

Indeksy wewnętrzne i zewnętrzne

Indeks wewnętrzny haszowany = indeks wewnętrzny i plik danych haszowany.

Indeks wewnętrzny ->– Plik danych posortowany i indeks pogrupowany,

albo– Plik danych haszowany i indeks haszowany.

Indeks zewnętrzny ->– Plik danych nieuporządkowany , albo– Plik danych posortowany , albo– Plik danych haszowany.

Page 10: INDEKSY I SORTOWANIE ZEWNĘTRZNE

10PJWSTK, L.Banachowski, SZB

Złożone klucze wyszukiwania

Złożone klucze wyszukiwania: kombinacja pól np. <sal,age>.– Zapytanie równościowe:

age=20 and sal =75– Zapytanie zakresowe:

age < 20; age=20 and sal > 10 Porządek leksykograficzny.

sue 13 75

bob

cal

joe 12

10

20

8011

12

name age sal

<sal, age>

<age, sal> <age>

<sal>

12,20

12,10

11,80

13,75

20,12

10,12

75,13

80,11

11

12

12

13

10

20

75

80

Rekordy danychposortowane <name>

Pozycje danychposortowane <sal,age>

Pozycje danychposortowane <sal>

Page 11: INDEKSY I SORTOWANIE ZEWNĘTRZNE

11PJWSTK, L.Banachowski, SZB

Pseudo-wartość NULL

Indeksowane są wszystkie wiersze, w których co najmniej jedna składowa klucza wyszukiwania indeksu nie jest NULL.

Na przykład, za pomocą indeksu na kolumnie Comm nie można zrealizować wyszukiwania wierszy z nieokreśloną wartością w polu Comm:

SELECT EnameFROM EmpWHERE Comm IS NULL;

Można … WHERE Comm IS NOLL NULL; Ograniczenie to nie dotyczy indeksów

bitmapowych i klastrowych.

Page 12: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Wyszukiwanie zakresowe – plik posortowany

"Wyznacz studentów ze średnią > 4.0"– Gdy dane w pliku posortowanym:

wyszukiwanie binarne aby znaleźć pierwszego takiego studenta;

przejdź plik wypisując pozostałych takich studentów.

– Plik indeksu k1< k2< … <KN.

Wyszukiwanie binarne na mniejszym pliku indeksu!

Page 0 Page1 Page NPage 2 Plik danych posortowany

k2 kNk1 Plik indeksu

Page 13: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Strona indeksu

Statyczne drzewo ISAM (indexed sequential access method)

W liściach są pozycje danych.

P0

K1 P

1K 2 P

2K m

P m

Pozycja indeksu

Węzływewnętrzne

Strony główne

Liście

Strony nadmiarowe

1K < K …. < K

2 m

Page 14: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Drzewo ISAM

10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97*

20 33 51 63

40

Korzeń

Page 15: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Wstawiamy 23*, 48*, 41*, 42* ...

10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97*

20 33 51 63

40

Korzeń

23* 48* 41*

42*

Stronynadmiarowe

Stronyindeksu

Stronygłówne

Page 16: INDEKSY I SORTOWANIE ZEWNĘTRZNE

B+ drzewo Wstawianie/usuwanie w czasie rzędu log N;

drzewo wyważone względem wysokości. (N = # liści)

Każdy węzeł (z wyjątkiem ewentualnie korzenia) zawiera d <= m <= 2d pozycji indeksu. Parametr d - stopień drzewa.

Zapytania równościowe i zakresowe.

Pozycje indeksu

Pozycje danych

Page 17: INDEKSY I SORTOWANIE ZEWNĘTRZNE

B+ drzewo

Wyszukiwanie zaczyna się w korzeniu a porównania klucza wyszukiwania prowadzą do liścia tak jak dla ISAM.

Wyszukiwanie 5*, 15*, >= 24* ...

Na podstawie wyniku wyszukiwania 15*, wiemy że 15* nie ma w drzewie

Korzeń

17 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

13

Page 18: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Drzewa B+ w praktyce

Średni stopień d=100. Średnie zapełnienie: 67%.

Typowa pojemność:– Wysokość 4: 1334 = 312,900,700 rekordów – Wysokość 3: 1333 = 2,352,637 rekordów

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

Page 19: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Wstawienie pozycji danych do B+ drzewa

Wyznacz odpowiedni liść L. Wstaw pozycję danych do L.

– Jeśli mieści się – to koniec!– Wpp, podziel L (na L i nowy węzeł L2)

Rozdziel równo pozycje, skopiuj na wyższy poziom środkowy klucz (najmniejszy w prawym węźle L2).

Do “ojca” L wstaw pozycję indeksu z tym kluczem i wskaźnikiem wskazującym na L2.

W razie potrzeby powtórz krok podziału rekurencyjnie.

Kroki podziału mogą dojść do korzenia i w rezultacie drzewo może zwiększyć swoją wysokość o jeden.

Page 20: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Wstawianie 8*

2* 3* 5* 7* 8*

5

Pozycja wstawiana do “ojca”jest kopiowana.

5 24 30

17

13

Podział liścia

Podział węzła wewnętrznego

Pozycja wstawiana do “ojca”jest przesuwana w górę .

Page 21: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Drzewo po wstawieniu 8*

Poprzedni korzeń uległ podziałowi. Wysokość drzewa zwiększyła się o 1. Możliwa redystrybucja pozycji danych w poziomie nie jestw praktyce realizowana.

2* 3*

Korzeń

17

24 30

14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

135

7*5* 8*

Page 22: INDEKSY I SORTOWANIE ZEWNĘTRZNE

22PJWSTK, L.Banachowski, SZB

B+ drzewo jako indeks wewnętrzny i zewnętrzny

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.

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).

Page 23: INDEKSY I SORTOWANIE ZEWNĘTRZNE

23PJWSTK, 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.

Page 24: INDEKSY I SORTOWANIE ZEWNĘTRZNE

24PJWSTK, L.Banachowski, SZB

Dodatkowe operacje na B+ drzewach

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%. 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+.

Page 25: INDEKSY I SORTOWANIE ZEWNĘTRZNE

25PJWSTK, 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).

Page 26: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Podsumowanie drzew

Zastosowanie indeksów o strukturze drzewa: – Wyszukiwanie zakresowe.– Wyszukiwanie równościowe. – Sortowanie (np. ORDER BY).

ISAM – struktura statyczna.– Modyfikowane są tylko liście.– Wymagane są strony nadmiarowe – mogące

istotnie pogorszyć działanie algorytmów. B+ drzewo – struktura dynamiczna.

– W praktyce wysokość zwykle <=4.

Page 27: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Indeks haszowany

Ustalona alokacja stron głównych; alokowane dodatkowe strony nadmiarowe w razie potrzeby.

h(k) np. = k mod M = “segment” do którego należy pozycja danych k* o kluczu k (M = # segmentów). h(klucz)

hklucz

Strony główne Strony nadmiarowe

10

M-1

Plik: nieuporządkowany, posortowany i haszowany.

Page 28: INDEKSY I SORTOWANIE ZEWNĘTRZNE

28PJWSTK, L.Banachowski, SZB

Indeks haszowany z uporządkowanymi segmentami

Wariant w którym pozycje danych są uporządkowane względem wartości klucza wyszukiwania.

Page 29: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Podsumowanie haszowania

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ł.

Indeksy haszowane dobre przy wyszukiwaniu

równościowym. Nie wspomagają wyszukiwania

zakresowego ani sortowania.

Page 30: INDEKSY I SORTOWANIE ZEWNĘTRZNE

30PJWSTK, L.Banachowski, SZB

Podsumowanie indeksu wewnętrznego

Dla jednej tabeli może być zbudowany tylko jeden indeks wewnętrzny i wiele indeksów zewnętrznych względem różnych kluczy wyszukiwania.

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.

Page 31: INDEKSY I SORTOWANIE ZEWNĘTRZNE

31PJWSTK, L.Banachowski, SZB

Indeks wewnętrzny – 2 przypadki

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.

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.

Page 32: INDEKSY I SORTOWANIE ZEWNĘTRZNE

32PJWSTK, 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.

Page 33: INDEKSY I SORTOWANIE ZEWNĘTRZNE

33PJWSTK, L.Banachowski, SZB

Struktury danych wielowymiarowe

Dzielona funkcja haszowana (ang. partitioned hash function):

H(v1,...,vn)=h1(v1)&h2(v2)&....&hn(vn)

Wartością funkcji haszującej dla układu wartości jest konkatenacja tekstowa wartości funkcji haszujących dla poszczególnych składowych.

Page 34: INDEKSY I SORTOWANIE ZEWNĘTRZNE

34PJWSTK, L.Banachowski, SZB

Drzewa wielowymiarowe

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ą.

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ą.

Page 35: INDEKSY I SORTOWANIE ZEWNĘTRZNE

35PJWSTK, 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)

Page 36: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Zastosowania sortowania w bazach danych

ORDER BY - dane są wymagane w pewnym porządku.

Budowa indeksu - początkowego B+ drzewa dla wczytywanego zbioru rekordów.

Złączanie tabel metodą Sort-merge. Realizacja DISTINCT, GROUP BY, UNION, EXCEPT -

alternatywą haszowanie.

Problem: posortować 1GB danych za pomocą 10MB RAM.

Page 37: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Sortowanie zewnętrzne (wielofazowe przez scalanie)

Faza 0 – sortowanie rekordów w ramach stron: Wczytaj stronę, posortuj ją, zapisz na dysku.

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

DyskDysk

Page 38: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Sortowanie wielofazowe przez scalanie

W każdej fazie odczytujemy i

zapisujemy każdą stronę w

pliku.

N = # stron => # faz =

Całkowity koszt = 2 N log N

Idea: Dziel i rządź: sortuj

podpliki i je scalaj.

Zamiast dwóch buforów

można użyć więcej.

Praktycznie liczba faz <=3.

log2 1N

Plik wejściowyFaza 0

Faza 1

Faza 2

Faza 3

9

3,4 6,2 9,4 8,7 5,6 3,1 2

3,4 5,62,6 4,9 7,8 1,3 2

2,34,6

4,7

8,91,35,6 2

2,3

4,46,7

8,9

1,23,56

1,22,3

3,4

4,56,6

7,8

Page 39: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Sortowanie za pomocą B+ drzewa

Warunek: Tabela ma indeks na B+ drzewie względem kolumn sortowania.

Idea: Przejść po liściach indeksu. Czy jest to dobra metoda? Przypadki:

– Indeks pogrupowany Bardzo dobra!

– Indeks nie pogrupowany Może być bardzo zła!

Page 40: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Wewnętrznyindeks pogrupowany

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

Page 41: INDEKSY I SORTOWANIE ZEWNĘTRZNE

Indeks niepogrupowany

Ogólnie, jedna operacja We/Wy na rekord danych!

Rekordy danych

Indeks

Pozycje danych

Page 42: INDEKSY I SORTOWANIE ZEWNĘTRZNE

42PJWSTK, 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

Page 43: INDEKSY I SORTOWANIE ZEWNĘTRZNE

43PJWSTK, L.Banachowski, SZB

Plik nieuporządkowany - bez indeksu wewnętrznego - indeks zewnętrzny oparty na B+ drzewie

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.

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.

Indeks zewnętrzny oparty na B+ drzewie jest automatycznie tworzony dla każdego klucza głównego i jednoznacznego.

Page 44: INDEKSY I SORTOWANIE ZEWNĘTRZNE

44PJWSTK, L.Banachowski, SZB

Tabela połączona z indeksem głównym opartym na B+ drzewie

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.

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.

Budując osobno perspektywę zmaterializowaną można jej nadać inną organizację.

Page 45: INDEKSY I SORTOWANIE ZEWNĘTRZNE

45PJWSTK, 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, .HobbyFROM 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

Page 46: INDEKSY I SORTOWANIE ZEWNĘTRZNE

46PJWSTK, L.Banachowski, SZB

Tworzenie tabeli 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;

Page 47: INDEKSY I SORTOWANIE ZEWNĘTRZNE

47PJWSTK, 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 kWHERE k.Id_konta = :numer;

Page 48: INDEKSY I SORTOWANIE ZEWNĘTRZNE

48PJWSTK, L.Banachowski, SZB

Tworzenie indeksu haszowanego

CREATE CLUSTER Klast_konta(Id_konta INTEGER)  SIZE 512 SINGLE TABLE  HASHKEYS 100003 HASH IS mod(Id_konta, 100003);

- 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);

Page 49: INDEKSY I SORTOWANIE ZEWNĘTRZNE

49PJWSTK, L.Banachowski, SZB

Tworzenie indeksu haszowanego

Indeks klastra jest tworzony automatycznie. 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.

Page 50: INDEKSY I SORTOWANIE ZEWNĘTRZNE

50PJWSTK, L.Banachowski, SZB

Sortowanie segmentów haszowanych

CREATE CLUSTER call_detail_cluster ( telno NUMBER, call_timestamp NUMBER SORT, call_duration NUMBER SORT ) HASHKEYS 10000 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 = 6505551212ORDER BY call_timestamp;

Page 51: INDEKSY I SORTOWANIE ZEWNĘTRZNE

51PJWSTK, 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