Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Systemy Zarządzania Bazami Danych

Podobne prezentacje


Prezentacja na temat: "Systemy Zarządzania Bazami Danych"— Zapis prezentacji:

1 Systemy Zarządzania Bazami Danych
Laboratorium 07 Indeksy

2 Agenda laboratorium Wprowadzenie - indeksy CREATE INDEX
CREATE INDEX – Management Studio Wprowadzenie – indeksy FULLTEXT CREATE FULLTEXT INDEX CREATE FULLTEXT INDEX – Management Studio DROP INDEX Zadania

3 Wprowadzenie - indeksy
Specjalne struktury zwane indeksami są dostępne praktycznie we wszystkich systemach bazodanowych na rynku. Indeksy służą do optymalizacji procesu szukania danych w bazie. Zazwyczaj mają one strukturę B-drzewa, co znacznie skraca czas dostępu do interesujących użytkownika danych. Indeksy w bazie danych można porównać do spisu treści w książce. Silnik bazy danych dzięki indeksom nie jest zmuszony do przeszukiwania tabel rekord po rekordzie. Przeszukiwanie dużej bazy danych, w której istnieje przykładowo kilka milionów rekordów w danej tabeli byłoby odczuwalnie czasochłonne. W Systemie SQL Server 2005 wyróżnia się następujące typy indeksów: Clustered – dane tabeli są fizycznie posortowane i zapisane według klucza tabeli wskazanego do indeksowania. Nonclustered – ten typ indeksowania można uznać za dodatkowy, ponieważ stosuje się go w tabelach z zaimplementowanym indeksowaniem. Dane są zapisywane zgodnie z kolejnością kluczy indeksów, jednakże nie jest to gwarantowane jeśli na danej tabeli/widoku nie jest nałożone indeksowanie typu clustered.

4 Wprowadzenie - indeksy
Unique – klucz indeksu zapewnia unikatowość danych. W danej tabeli/widoku dane rekordu muszą być w pewien sposób unikatowe w stosunku do danych innych rekordów. Indeksowanie unique może być stosowane zarówno z indeksowaniem Clustered jak i Nonclustered. Index with included columns - jest to indeksowanie typu Nonclustered z rozszerzeniem o kolumny nie będących kluczami tabeli. Indexed views – indeksowanie widoku , widok i wynik jego przeglądania jest na stałe zapisywane podobnie jak tabela z indeksami clustered. Indeksy nonclustered mogą być nałożone na widok jeżeli wcześniej stworzono dla niego indeksowanie clustered. Full-text – specjalny typ indeksów bazujących na znakach. Jest on wykonany i utrzymywane przez usługę Microsoft Full-Text Egine for SQL Server. Stosuje się go jeżeli występuje potrzeba skomplikowanego przeszukiwania łańcuchów znaków. XML – indeksowanie przeznaczone dla tabel zapisanych w postaci XML

5 CREATE INDEX Tworzenie indeksów wykonuje się za pomocą klauzuli CREATE INDEX. Dodatkowo przed słowem kluczowym INDEX można określić czy indeks ma być unikatowy (UNIQUE) oraz typ indeksowania, czyli CLUSTERED lub NONCLUSTERED. Następnie po elemencie INDEX podaje się unikalną w bazie danych nazwę indeksu. Element ON określa dla jakiego obiektu (tabela/widok) ma być tworzony indeks oraz w nawiasie wyróżnia się kolumnę (lub kolumny) oznaczoną kluczem (obcym lub głównym) będącą podstawą do indeksowania danych w tabeli/widoku. Dodatkowo można określić czy indeks ma posortować dane rosnąco (ASC) czy malejąco (DES). WITH poszerza możliwości ustawień indeksowania (zostały one opisane w dalszej części laboratorium). Również istnieje możliwość określenia do jakiego schematu partycji oraz dla jakiej kolumny ma być zastosowane partycjonowanie indeksu (ON { partition_scheme_name…). Należy wtedy również określić grupę plików w jakiej znajdzie się indeks. W przeciwnym przypadku indeks domyślnie znajdzie się w tym samym schemacie partycjonowania i grupie plików co indeksowana tabela. W laboratorium nie ujęto polecenia ALTER INDEXT i ALTER FULLTEXT INDEX ponieważ są one niemalże identyczne Jak polecenia typu CREATE dla indeksów. Proszę się odwołać do dokumentacji w razie potrzeby.

6 CREATE INDEX CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ] [ ; ]

7 CREATE INDEX - object <object> ::= {
Poniższa gałąź pokazuje jak należy definiować nazwę tabeli lub widoku. Jeżeli obiekt jest przypisany do schematu w bazie danych to należy go podać przed nazwą tabeli/widoku i oddzielić nazwy znakiem kropki. <object> ::= { [ database_name. [ schema_name ] . | schema_name. ] table_or_view_name }

8 CREATE INDEX Opcje indeksowania dostępne pod < relational_index_option > dają możliwość wyspecyfikowania sposobu indeksowania. Opcja FILLFACTOR określa ilość wolnego miejsca w stronach danych. Jest ono przeznaczone dla danych które mogą być dodane do tabeli. Domyślnie system pozostawia minimalną ilość miejsca, co może spowolnić masowe ładowanie danych. Ponieważ wtedy dane ze stron są dzielone pomiędzy dwie nowe strony aby udostępnić miejsca nowym rekordom. Wiąże się to ze spadkiem wydajności dodawania nowych rekordów do tabeli a zarazem nie zajmuje przestrzeni dyskowej na wyrost. FILLFACTOR służy do procentowego określenia wolnego miejsca dla najniższych stron danych (liści) w strukturze B-drzewa oraz określa wartość dla opcji PAD_INDEX. Jeżeli zostanie poda liczba 80 to oznacza, że 20% miejsca na stronie będzie pusta. PAD_INDEX czerpie wartość z FILFACTIOR i określa ilość wolego miejsca na stronach „pośrednich”, pomiędzy korzeniem B-drzewa a liśćmi. Opcja SORT_IN_TEMPDB (ON) wspiera tworzenie indeksów. Wykorzystywana jest wtedy tymczasowa baza danych (tempdb) systemu SQL Server. Wynik pośredniego sortowania jest przechowywany w tempdb dzięki czemu można zmniejszyć czas tworzenia indeksów, ma to racjonalne zastosowanie jeżeli tymczasowa baza danych fizycznie znajduje się na innym dysku niż sortowane dane. Jeżeli tworzy się unikatowe indeksy (UNIQUE) to w przypadku napotkania zduplikowanych danych wyznaczonych dla indeksowania zostanie wyświetlone ostrzeżenie. Proces indeksowania nie zostanie przerwany jeżeli opcja IGNORE_DUP_KEY będzie miała wartość ON.

9 CREATE INDEX STATISTICS_NORECOMPUTE określa czy dana tabela ma mieć ponownie przeliczone statystyki. W przypadku wybrania wartości ON statystyki nie będą automatycznie przeliczone. Funkcja DROP_EXISTING pozwala na usunięcie przebudowanie istniejącego indeksu jeżeli jego nazwa jest taka sama jak indeksu tworzonego. Zaś DROP_EXISTING ustawione na OFF nie pozwoli zbudować indeksu o identycznej nazwie. Tworzenie indeksów wymaga wstrzymania dostępu do tabeli. Do określenia czy tabela ma być dostępna podczas procesu indeksowania określa opcja ONLINE. Opcja ta ustawiona na ON powoduje, że tabela jest niedostępna tylko na krótki czas. ONLINE z ustawieniem OFF nie pozwala na modyfikacje tabeli, aczkolwiek przeglądanie tabeli nie jest zabronione (można wykonywać zapytania typu SELECT). Warto dodać, że opcja ta jest dostępna dopiero w wersji SQL Server 2005 Enterprice. ALLOW_ROW_LOCKS oraz ALLOW_PAGE_LOCKS Blokuje dostęp do danych, które są indeksowane (parametr OFF zwalnia blokady). W przypadku ALLOW_PAGE_LOCKS jest to zablokowanie strony z danymi zaś w ALLOW_ROW_LOCKS jest to dany rekord. Domyślnie oba te parametry są ustawione na ON (silnik bazy danych sam określa, które dane mają być niedostępne). MAXDOP czyli maksymalna liczba procesorów, które będą brały udział w procesie indeksowania. Maksymalnie można podać 64 procesory do wykonywania zadań równoległych. Domyślna wartość jest równa 0 co oznacza, że proces będzie wykonywany przez wszystkie dostępne procesory.

10 CREATE INDEX - relational_index_option
{ PAD_INDEX = { ON | OFF } | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = { ON | OFF } | IGNORE_DUP_KEY = { ON | OFF } | STATISTICS_NORECOMPUTE = { ON | OFF } | DROP_EXISTING = { ON | OFF } | ONLINE = { ON | OFF } | ALLOW_ROW_LOCKS = { ON | OFF } | ALLOW_PAGE_LOCKS = { ON | OFF } | MAXDOP = max_degree_of_parallelism }

11 CREATE INDEX – Management Studio
Management Studiu umożliwia na tworzenie indeksów za pomocą interfejsu graficznego. Aby utworzyć lub zmienić indeksowanie w tabeli należy w Object Explorer kliknąć prawym przyciskiem myszy na danej tabeli i wybrać polecenie Design.

12 CREATE INDEX – Management Studio
Po otwarciu edycji danej tabeli, należy kliknąć prawym przyciskiem myszy na tabeli kolumn i wywołać polecenie Indexes/Keys tak jak na rysunku poniżej.

13 CREATE INDEX – Management Studio
W nowym oknie, Indexes/Keys (Rys 4.15) dostępne są opcje indeksowania. W nim wybiera się na podstawie jakiej kolumny ma zostać stworzone indeksowanie. Ramka w dolnej prawej stronie okna posiada spis opcji kolumny oraz między innymi właściwości indeksowania, które zostały opisane we wcześniejszej części rozdziału przy poleceniu CREATE INDEX. Po skonfigurowaniu opcji indeksowania wystarczy kliknąć przycisk Add aby dodać indeksowanie.

14 Wprowadzenie – indeksy FULLTEXT
Indeksy typu Full-Text są specyficzną odmianą indeksowania. Tego typu indeksowanie tworzy się dla kolumn, które przechowują ciągi znaków. Przeszukiwanie ciągów znaków w tabelach jest bardzo obciążające dla systemu bazy danych a zwykłe indeksowanie nie obejmuje kolumn typu łańcuchowego. Dlatego wprowadzono indeksowanie Full- Text.

15 CREATE FULLTEXT INDEX Zanim administrator zacznie tworzyć indeksowanie Full-Text musi stworzyć katalog Full Text poleceniem CREATE FULLTEXT CATALOG. Następnie można przejść do tworzenia indeksowania. Komenda CREATE FULLTEXT INDEX ON tworzy omawiane indeksowanie. Jako table_name należy podać nazwę tabeli, która będzie indeksowana. Kolejnym krokiem jest określenie kolumny i jej typu oraz opcjonalnie nazwę języka danych (Angielski, Chiński etc.). Element KEY INDEX służy do podania kolumny, która jest kluczem głównym w tabeli, i jest on niezbędny do indeksowania. Następnie po elemencie ON można podać nazwę wcześniej stworzonego katalogu indeksowania Full-Text. Opcja WITH umożliwia ustawienie aktualizacji indeksowania (CHANGE_TRACKING). Dostępne są trzy sposoby aktualizacji indeksów po zmodyfikowaniu danych w tabeli. MANUAL oznacz, że proces ten będzie uruchamiany przez administratora ręcznie lub zgodnie z planem utrzymania bazy danych, jeżeli obejmuje on omawianą aktualizację indeksów. Ustawienie AUTO pozwala na automatyczne aktualizowanie i będzie to zarządzane przez system bazy danych. OFF wyłącza aktualizowanie, zaś dodatkowy parametr NO POPULATION oznacza, że proces indeksowania danych nie nastąpi pomimo stworzenia indeksu Full-Text.

16 CREATE FULLTEXT INDEX CREATE FULLTEXT INDEX ON table_name
[(column_name [TYPE COLUMN type_column_name] [LANGUAGE language_term] [,...n])] KEY INDEX index_name [ON fulltext_catalog_name] [WITH {CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}} ]

17 CREATE FULLTEXT INDEX – Management Studio
Kreowanie indeksowania Full-Text jest opatrzone prostym kreatorem w Management Studio. Aby go uruchomić Należy kliknąć prawym przyciskiem myszy na tabelę w oknie Object Explorer i następnie rozwinąć polecenie Full-text index i wybrać Define Full-text.

18 CREATE FULLTEXT INDEX – Management Studio
W pierwszym oknie kreatora należy wybrać kolumnę klucza głównego tabeli. W następnym kroku (po naciśnięciu przycisku Next) można zaznaczyć kolumny, które zostaną poddane indeksowaniu; można wybrać więcej niż jedną (rysunek na następnym slajdzie). Po kliknięciu Next w oknie kreatora wybiera się sposób aktualizacji indeksów (Automatically, Manually lub Do not track change). W kolejnym kroku producent SQL Server zastosował ciekawe rozwiązanie. Jest to możliwość stworzenia katalogu indeksów. Oczywiście można wybrać już istniejący, ale jeśli administrator jeszcze nie stworzył go to właśnie może to wykonać w tym kroku. Na ostatniej (edytowalnej) stronie kreatora można opcjonalnie określić plan aktualizacji indeksów. Aktualizacja może nastąpić między innymi po tym jak procesor serwera przejdzie w stan bezczynności lub w czasie dokładnie określonym przez administratora bazy.

19 CREATE FULLTEXT INDEX – Management Studio

20 Zadania Zadania proszę wykonać za pomocą języka SQL, następnie spróbować odwzorować je w Management Studio. Zadania dotyczą bazy Restauracja. 1. Stwórz indeks typu clustered na tabeli GODZINY_PRACY. -ilość wolnego miejsca na stronach danych ma wynosić 90% -statystki nie mają być przeliczane -tabela TempDB ma nie wspierać indeksowania -jeżeli będzie na tabeli indeksowanie, to ma zostać ono nadpisane -podczas indeksowania tabela ma nie być w trybie ONLINE -rekordy i strony danych mają być zablokowane -wolne miejsce na stronach danych – „pośrednich”, ma być domyślna 2. Stwórz indeks typu nonclustered, tak na wzór tego z 1 zadania. ale nie określaj wolnej przestrzeni na stronach danych. Indeks ma ma być nałożony na kolumnę ILOSC_GODZIN 3. Stwórz katalog FULL-TEXT index (dokumentacja - CREATE FULLTEXT CATALOG). 4. Dodaj indeksowanie typu FullText dla tabeli ZYWNOSC na kolumnę Nazwa. -indeks ma nie być aktualizowany -proces indeksowania ma nie rozpocząć się po jego stworzeniu (tylko Management Studio) -uruchom ręcznie indeksowanie (tylko Management Studio)

21 Koniec laboratorium 07


Pobierz ppt "Systemy Zarządzania Bazami Danych"

Podobne prezentacje


Reklamy Google