Dodatkowe dyskowe struktury danych 1. Składowanie danych w
Transkrypt
Dodatkowe dyskowe struktury danych 1. Składowanie danych w
Dodatkowe dyskowe struktury danych 1. Składowanie danych w plikach klastrowych Możliwe jest przechowywanie w jednym pliku klastrowym krotek wielu relacji. Krotki różnych relacji o takich samych wartościach wybranego atrybutu są przechowywane w tych samych blokach dyskowych. Dostępne są dwa rodzaje klastrów: haszowe i indeksowe. Zastosowanie klastrów może przyśpieszyć wykonanie równościowego połączenia relacji umieszczonych w klastrze oraz operacje dostępu lub grupowania odwołujące się do wspólnego atrybutu klastra. CREATE CLUSTER nazwa_klastra (definicje atrybutów) INDEX SIZE wielkość_bloku; Id_zesp = 10 <'Administracja'> <100, 'Nowak', 'sekretarka', 1 950> Indeks on id_zesp <110, 'Tarzan', 'prezes', 25 000> <120, 'Buc', 'v-prezes', 18 500> Id_zesp = 20 <'Ochrona'> <130, 'Baran', 'portier', 1 950> <140, 'Buła', 'ochroniarz', 2500> Przykład utworzenia pliku klastrowego: CREATE CLUSTER zesp_prac (id_zesp NUMBER(4)) INDEX SIZE 4 K; -- <= block size Założenie indeksu na pustym klastrze: CREATE INDEX zesp_prac_ind ON CLUSTER zesp_prac; Utworzenie tabeli w klastrze: CREATE TABLE pracownicy2 CLUSTER zesp_prac (id_zesp) AS SELECT * FROM pracownicy; Dodanie kolejnej tabeli do klastra: CREATE TABLE zespoły2 CLUSTER zesp_prac (id_zesp) AS SELECT * FROM zespoły; Operacja połączenia tabel Pracownicy2 i Zespoły2 w zdefiniowanym klastrze, będzie najbardziej wydajna w zbiorze różnych metod wykonywania operacji połączeń. Krotki tych relacji są na bieżąco fizycznie łączone w pliku klastrowym. 2. Składowanie relacji w plikach haszowych Dla pewnej klasy zapytań pliki haszowe oferują najszybszy z możliwych dostępów za pomocą skojarzonej z plikiem funkcji haszowej. CREATE CLUSTER nazwa_klastra ( atrybut_haszowy typ_danych) SIZE rozmiar_kubełka SINGLE TABLE HASHKEYS liczba_kubełków HASH IS funkcja <101, 'Nowak', 'sekretarka', 1 950> <111, 'Tarzan', 'prezes', 25 000> <121, 'Buc', 'v-prezes', 18 500> mod(id_prac,10) ) 2 102 hash value = 1 <102, 'Baran', 'portier', 1 950> <112, 'Buła', 'ochroniarz', 2500> Przykład: CREATE CLUSTER haszowy ( id_prac number(6)) SIZE 1 K SINGLE TABLE HASHKEYS 1025 hash value = 2 Wartości size i hashkeys muszą wynikać z przewidywanej liczby rekordów tabeli, rozmiaru pojedynczych rekordów i rozkładu wartości atrybutu haszowego. Faktyczna liczba kubełków w pliku haszowym jest równa najmniejszej z liczb pierwszych większej od podanej wartości hashkeys. Domyślną funkcją haszującą jest funkcja modulo. Tworzenie tabeli w klastrze haszowym: CREATE TABLE prac_hash (id_prac NUMBER(6), id_zesp NUMBER(3), nazwisko VARCHAR2(50), płeć CHAR(1), czy_etat CHAR(1), płaca NUMBER(6,2), płaca_dod NUMBER(6,2)) CLUSTER haszowy(id_prac) lub CREATE TABLE prac_hash CLUSTER haszowy(id_prac) AS SELECT * FROM pracownicy 3. Indeksy rzadkie – tablica zorganizowana jako indeks W DBMS Oracle indeksy rzadkie są implementowane przez składowanie tabel jako indeksów. Taka organizacja wymusza posortowanie krotek relacji według klucza podstawowego. CREATE TABLE nazwa_tabeli (specyfikacja atrybutów i więzów integralności) ORGANIZATION INDEX PCTTHRESHOLD procent /* Procent objętości liści indeksu przeznaczony do składowania pojedynczej krotki. Domyślną i maksymalną wartością jest 50%, co oznacza co najmniej dwie krotki na liść. Krotki o wielkości przekraczającej 50% objętości liści są dzielone na dwie części. Jedna część, która musi zawierać co najmniej cały klucz, pozostaje w indeksie. Wartości pozostałych atrybutów są lokowane w dodatkowym obszarze poza indeksem */ OVERFLOW TABLESPACE przestrzeń tabel /* Przestrzeń tabel, w której zostaną umieszczone części krotek nie mieszczące się w indeksie */ INCLUDING atrybut /* Alternatywny sposób podziału zbyt długich krotek. Parametr definiuje ostatni atrybut, w kolejności wynikającej z definicji tabeli, który musi się znaleźć w liściach indeksu. */ Przykład: CREATE TABLE prac_iot (id_prac NUMBER(6), id_zesp NUMBER(3), nazwisko VARCHAR2(50), plec CHAR(1), czy_etat CHAR(1), placa NUMBER(6,2), placa_dod NUMBER(6,2), constraint PK_IOT primary key(id_prac) ) ORGANIZATION INDEX INCLUDING czy_etat OVERFLOW TABLESPACE Inna_przestrzeń Indeksy rzadkie są potencjalnie niższe niż gęste i oferują większą funkcjonalność. W DBMS Oracle indeksy rzadkie mogą być zakładane tylko na kluczach podstawowych. Ćwiczenia Dla każdej z poniższych operacji znajdź i zweryfikuj dyskowe struktury danych umożliwiające najszybszą z możliwych realizacji tych poleceń. Dla każdego z analizowanych rozwiązań porównaj funkcje kosztu i liczby operacji dyskowych (jako sumy db block gets i consistent gets przy liczbie recursive calls równej 0) niezbędnych do wykonania tego polecenia. + { = 82 Weryfikacja każdego z proponowanych rozwiązań musi być poprzedzona zebraniem odpowiednich statystyk. 1. select * from prac where id_prac = 5012 2. select count(distinct nazwisko) from prac where id_prac between 3012 and 4087 3. select count(*), avg(placa), sum(placa) from prac where id_zesp = 3 4. select nazwa, nazwisko from prac p inner join zesp z on z.id_zesp = p.id_zesp where z.id_zesp = 2 and placa > 1900; 5. select nazwisko, placa, e.placa_max, z.nazwa from (prac p inner join zesp z on p.id_zesp = z.id_zesp) inner join etaty2 e on p.etat = e.nazwa and p.placa > e.placa_max 0 15 db block gets consistent gets