Fizyczna struktura bazy danych w SQL Serwerze



Podobne dokumenty
Administracja i programowanie pod Microsoft SQL Server 2000

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Język SQL, zajęcia nr 1

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Autor: Joanna Karwowska

Wykład 5. SQL praca z tabelami 2

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Wykład 8. SQL praca z tabelami 5

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

SQL (ang. Structured Query Language)

Wykład 2. Relacyjny model danych

Przykładowa baza danych BIBLIOTEKA

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych. Polecenia SQL

STROJENIE BAZ DANYCH: INDEKSY. Cezary Ołtuszyk coltuszyk.wordpress.com

Wykład 4. SQL praca z tabelami 1

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Programowanie obiektów

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

WPROWADZENIE DO BAZ DANYCH

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Bazy danych. dr inż. Arkadiusz Mirakowski

Wykład 05 Bazy danych

5. Bazy danych Base Okno bazy danych

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Fizyczna struktura bazy danych Indeksy Optymalizacja. Fizyczna struktura bazy danych (c.d.) Tadeusz Pankowski

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Optymalizacja poleceń SQL Metody dostępu do danych

Autor: Joanna Karwowska

Ref. 7 - Język SQL - polecenia DDL i DML

Relacyjne bazy danych. Podstawy SQL

Konspekt do lekcji informatyki dla klasy II gimnazjum. TEMAT(1): Baza danych w programie Microsoft Access.

Przestrzenne bazy danych Podstawy języka SQL

2017/2018 WGGiOS AGH. LibreOffice Base

Podstawy technologii WWW

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Indeksowanie w bazach danych

1 Instalowanie i uaktualnianie serwera SQL Server

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

SIECI KOMPUTEROWE I BAZY DANYCH

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Oracle11g: Wprowadzenie do SQL

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Internetowe bazy danych

Systemowe aspekty baz danych

Wprowadzenie do baz danych

Laboratorium Bazy danych SQL 2

Administracja i programowanie pod Microsoft SQL Server 2000

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Projekt dziennika lekcyjnego

Bazy danych 6. Klucze obce. P. F. Góra

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Relacyjne bazy danych. Podstawy SQL

Optymalizacja poleceń SQL

CREATE USER

Instrukcja CREATE TABLE

Struktura drzewa w MySQL. Michał Tyszczenko

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych - wykład wstępny

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Widok Connections po utworzeniu połączenia. Obszar roboczy

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Bazy danych 2. Wykład 3. Metodologia projektowania baz danych (projektowanie fizyczne)

Tabela wewnętrzna - definicja

Język SQL, zajęcia nr 2

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

E.14 Bazy Danych cz. 16 SQL Tworzenie, modyfikowanie i usuwanie tabel

Bazy danych. Andrzej Łachwa, UJ, /15

Bazy danych. dr Radosław Matusik. radmat

Wykład 6. SQL praca z tabelami 3

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Aspekty aktywne baz danych

Administracja i programowanie pod Microsoft SQL Server 2000

SIECI KOMPUTEROWE I BAZY DANYCH

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Bazy danych 7. SQL podstawy

Obiekty dowolnego typu, w tym bazy danych, możemy tworzyć instrukcją CREATE. Po czasowniku CREATE należy podać typ tworzonego obiektu i jego nazwę.

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

SZKOLENIE: Administrator baz danych. Cel szkolenia

Bazy danych Ćwiczenia projektowe

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Transkrypt:

Sposób przechowywania danych na dysku twardym komputera ma zasadnicze znaczenie dla wydajności całej bazy i jest powodem tworzenia między innymi indeksów. Fizyczna struktura bazy danych w SQL Serwerze Dane zapisane są w 8-kilobajtowych ciągłych obszarach zwanymi stronami. Pojedynczy wiersz tabeli nie może być zapisany na kilku stronach, ale małe wiersze mogą dzielić stronę. Strony są łączone w 64- kilobajtowe zakresy. Małe tabele mogą dzielić ten sam zakres. Dane zapisywane na stronach nie są w żaden sposób uporządkowane, chyba że został utworzony indeks grupujący. Próba dodania danych do pełnej strony powoduje podzielenie już zapisanych w niej danych pomiędzy dwie strony. Jeżeli nie istnieją indeksy to wyszukanie pojedynczego wiersza tabeli wiąże się z koniecznością odczytania wszystkich stron, na których została zapisana tabela. Pełne przeszukanie tabeli rozpoczyna się od odczytania pierwszej strony tabeli, następnie odczytywane są wszystkie pozostałe strony i następuję wybór wierszy spełniających podane kryterium. Oznacza to, że w przypadku braku indeksu może być potrzeba odczytania megabajtów danych tylko po to aby znaleźć pojedyncza informacje np. numer czyjegoś telefonu. W przypadku gdy istnieją powiązane z tabelą indeksy, znalezienie potrzebnych danych wymaga tylko znalezienia w indeksie ( jest on z reguły obiektem dużo mniejszym niż tabela) wierszy tabeli spełniających podane kryterium i odczytania wyłącznie tych stron, na których zostały zapisane znalezione wiersze. Indeks zapewnia szybki dostęp do danych podczas przeszukiwania. Dzięki indeksom można szybko odnaleźć wiersze: a) spełniające warunki klauzuli WHERE, b) pasujące klauzuli JOIN. Pozwalają na zachowanie różnowartościowości kolumn kluczy podczas operacji INSERT i UPDATE. Wspomagają również SQL serwer przy sortowaniu, agregowaniu i grupowaniu danych jak również przy wyszukiwaniu wierszy wskazanych klauzulą TOP. O wyborze indeksu decyduje optymalizator kwarend określając, które (ewentualnie) indeksy będą najbardziej użyteczne. 1

Rodzaje indeksów SQL Server obsługuje dwa rodzaje indeksów: zgrupowane - grupujące (klastrowe) (clustered) i niezgrupowane (nieklastrowe) (nonclustered). W indeksie zgrupowanym dane są przechowywane we właściwej kolejności jak np. w encyklopedii. Indeks niezgrupowany jest oddzielnym obiektem bazy danych, wskazującym poszczególne wiersze w tabeli, ale bez uwzględnienia sposobu zapisania wiersz. Odpowiednikiem tego typu indeksu jest indeks znajdujący się na końcu niektórych ksiąze. Zarówno indeksy zgrupowane jak i niezgrupowane przechowują informacje przy użyciu standardowych B-drzew. B-dzrewo zapewnia szybki dostęp do danych gdyż grupują rekordy o podobnych kluczach. B- drzewo oznacza drzewo zbalansowane i właśnie balansowanie drzewa jest kluczową właściwością B- drzewa. Stan drzewa jest przez cały czas kontrolowany, a gałęzie są w razie potrzeby modyfikowane tak, aby do przejścia przez drzewo w celu odnalezienia jakiejś wartości i dotarcie do konkretnego rekordu wymagało tylko kilku dostępów do strony. Indeksy zgrupowane Większość tabel powinna mieć indeks zgrupowany, a jeśli tabela ma tylko jeden indeks to powinien być to indeks zgrupowany. Kolejność zapisów danych zgodna z wartościami klucza indeksu zgrupowanego oznacza, że zachowany jest odpowiedni porządek stron w łańcuchu. Jeśli SQL Server przemierza łańcuch stron, będzie odwiedzał każdy wiersz w kolejności indeksu zgrupowanego, a nowe strony mogą być swobodnie dodawane. W programie SQL Server wszystkie indeksy zgrupowane są różnowartościowe, nawet, jeśli zbudujemy indeks bez użycia klauzuli UNIQUE. Wtedy SQL Server wymusi różnowartościowość przez dodanie do wierszy (jeżeli zajdzie taka potrzeba) identyfikator ujednoznaczający (uniquefer). Jest to 4 bajtowa wartość dodawana jako kolejny klucz sortowania do tych wierszy, które mają powtarzające się wartości podstawowego klucza sortowania. Indeksy niezgrupowane W przypadku indeksu niezgrupowanego najniższy poziom drzewa (poziom liści) zawiera zakładkę informującą, SQL Sever, gdzie ma znaleźć wiersz danych odpowiadający kluczowi indeksu. Dal jednej tabeli można ich maksymalnie utworzyć 249. 2

Tworzenie indeksu CREATE [UNIQUE] [CLUSTERED] [NONCLUSTERED] INDEX nazwa_indeksu ON {tabela/widok} (kolumna [Asc/Desc] [,...n]) [WITH <opcja_indeksu> [...n]] <opcja indeksu>::= {PAD_INDEX FILLFACTOR = współczynnik_wypełnienia IGNORE_DUP_KEY DROP_EXISTING STATISTICS_NORECOMPUTE SORT_IN_TEMPDB } CREATE INDEX tel_prac_idx ON pracownicy (telefon) wykonanie tego polecenia spowoduje utworzenie indeksu niezgripowanego o nazwie tel_prac_idx na atrybucie telefon w relacji pracownicy. 3

Argumenty polecenia CREATE INDEX Argument UNIQUE CLUSTREAD NONCLUSTREAD nazwa_indeksu tabela widok kolumna ASC DESC ON grupa_plików PAD_INDEX FILLFACTOR= współczynnik_wypełnie nia IGNORE_DUP_KEY DROP_EXISTING STATISTICS_NO_RECOMPU TE SORT_IN_TEMPDB Wyjaśnienie nie dopuszcza się występowania dwóch takich samych wierszy, jeśli wśród danych mimo wszystko zajdzie taka sytuacja, to indeks nie zostanie utworzony określenie sposobu tworzenia indeksu. Można utworzyć tylko jeden indeks klastrowy i 249 indeksów nieklastrowych. Domyślnie tworzy się indeksy nieklastrowe. określa nazwę tworzonego indeksu nazwa tabeli lub perspektywy (widoku) na podstawie której ma zostać utworzony indeks nazwa kolumny lub kolumn (gdy ma być to indeks złożony) określenie sposobu sortowania indeksu (rosnąco ASC, czy malejąco DESC), domyślnie indeks jest posortowany rosnąco określa grupę plików w których indeks ma być tworzony określa, że powinna być zostawiona przestrzeń dla przyszłych aktualizacji indeksów (przydaje się np. przy atrybutach typu varchar) określa jaki procent bloku ma zostać zapełniony używany z klauzula UNIQUE. Jeśli nie będzie klauzuli IGNORE_DUP_KEY, i wystąpi próba dodania indeksu o istniejącej wartości wówczas indeks nie zostanie utworzony, jeśli natomiast tworzymy indeks z klauzulą IGNORE_DUP_KEY to w tej samej sytuacji zdublowany klucz zostanie odrzucony, ale indeks zostanie utworzony używany do ponownego tworzenia istniejących indeksów, przy tworzeniu indeksów klastrowych można odczuć wzrost wydajności, ponieważ tworzą się na nowo indeksy nieklastrowe oznacza, że statystyki indeksu nie maja być na bieżąco uaktualniane oznacza, że pośrednie wyniki sortowania maja być przechowywane w bazie tempdb, jeśli baza ta znajduje się na innym dysku niż baza z danymi użytkownika to znacznie zwiększa to wydajność Ograniczenia i indeksy Użycie polecenia CREATE INDEX lub deklaracja ograniczenia PRIMARY KAY lub UNIQUE powoduje utworzenie różnowartościowego indeksu na jednej lub kilku kolumnach. Nie ma znaczenia (z punktu widzenia wewnętrznych mechanizmów przechowywania i obsługi indeksów), w jaki sposób został utworzony indeks różnowartościowy. Optymalizatora kwerend nie interesuje, w jaki sposób powstał indeks. Tworząc tabelę z ograniczeniami, PRIMARY KEY lub UNIQUE, można określić czy skojarzony indeks będzie zgrupowany czy niezgrupowany oraz podać wartość fillfactor. Największą różnicą między tworzeniem indeksów przez polecenie CREATE INDEX i tworzeniem indeksów obsługujących ograniczenia jest usuwanie indeksu. 4

Polecenie DROP INDEX umożliwia usuwanie tylko indeksów, które zostały zbudowane za pomocą CREATE INDEX. Aby usunąć indeksy obsługujące ograniczenia, należy usunąć ograniczenia za pomocą ALTER TABLE. Oprócz tego, aby usunąć ograniczenia PRIMARY KEY lub UNIQUE, dla którego wymuszone jest ograniczenie FOREGIN KEY, trzeba najpierw usunąć to ograniczenie. W czasie przedefiniowywania ograniczeń i przebudowywania indeksów (nie utworzonych poleceniem CREATE INDEX) może prowadzić do powstania niebezpiecznego okna czasowego. Po zdjęciu ograniczenia FOREIGN KEY instrukcja INSERT może dodawać do tabeli wiersz naruszający integralność referencyjną.. Jednym ze sposobów uniknięcia tego problemu jest zastosowanie polecenia DBCC DBREINDEX. Polecenie to przebudowuje wszystkie indeksy tabeli w jednej operacji. Dla których kolumn tworzyć indeksy? Indeksy z wyjątkiem grupujących w pewnych sytuacjach mogą wydłużać czas operacji wstawiania i modyfikowania danych. Indeks grupujący powinien być tworzony dla kolumny, według której użytkownicy często sortują dane odczytywane z tabeli lub dla kolumn przechowujących wartości, na podstawie których zwracane są zbiory danych. Dla indeksów niegrupujących odpowiednimi kandydatami są kolumny, które przechowują wartości częściej odczytywane niż modyfikowane, wykorzystywane są do łączenia lub wyszukiwania danych, przechowują różnorodne wartości. W praktyce indeksy tworzymy dla: kolumn z ograniczeniem PRIMARY KEY, kolumn z ograniczeniem FOREGIN KEY oraz kolumn wykorzystywanych przy łączeniu tabel, kolumn przechowujących dane wykorzystywane jako argument wyszukiwania, kolumn przechowujących często sortowane dane. Uwaga Nie jest możliwe założenie indeksu dla kolumn przechowujących dane typu bit, text, ntext, image. 1. Stwórz indeks dla tabeli WYKONAWCY dla kolumny Nazwisko posortowane malejąco 5

2. Stwórz indeks dla tabeli WYKONAWCY dla kolumny Pseudonim posortowane rosnąco, indeks powinien być unikatowy, ustaw odrzucanie zdublowanego klucza, i ustaw 50% wolnego miejsca 3. Stwórz indeks dla tabeli WYKONAWCY dla kolumn Nazwisko i Pseudonim 4. Dla tabeli PRACOWNICY stwórz indeks dla kolumn Stanowisko i Id_Dzialu 5. Dla tabeli PRACOWNICY stwórz indeks dla kolumny Nazwisko 6