strojenie baz danych: indeksy - Cezary Ołtuszyk

Transkrypt

strojenie baz danych: indeksy - Cezary Ołtuszyk
STROJENIE BAZ DANYCH:
INDEKSY
Cezary Ołtuszyk
coltuszyk.wordpress.com
STROJENIE BAZ DANYCH: INDEKSY
Plan spotkania
I.
Wprowadzenie do strojenia baz danych
II.
Mierzenie wydajności
III.
Jak SQL Server przechowuje i czyta dane?
IV.
Budowa i typy indeksów
V.
Strategie indeksowania
VI.
Podsumowanie
STROJENIE BAZ DANYCH: INDEKSY
Wprowadzenie do strojenia baz danych
Strojenie baz danych jest
procesem
polegającym
na
skróceniu
czasu
odpowiedzi
serwera na przesyłane do niego
zapytania.
Proces ten możemy podzielić na
kilka etapów, z czego jednym z
nich jest tworzenie indeksów
Tuning
serwera
Rozw.
p.wielodostępu
Indeksowanie
Optymalizacja zapytań
Projektowanie baz danych
STROJENIE BAZ DANYCH: INDEKSY
Mierzenie wydajności
Do podstawowych miar związanych z
mierzeniem
wydajności
można
zaliczyć:

Czas wykonania zapytań SQL

Plan wykonania instrukcji

Ilość odczytanych danych

Czas zajętości procesora
Niestety żadna z tych miar nie
jest idealna 
STROJENIE BAZ DANYCH: INDEKSY
Jak SQL Server przechowuje i czyta dane?
Data Pages
Page 1
Page 2
Page 3
Page 4
Con ...
Funk ...
Woods ...
...
...
...
...
Russo ...
Woods ...
Barr ...
...
...
...
...
Akers ...
Funk ...
Smith ...
Martin ...
...
...
Smith
Owen
Jones
...
...
...
...
...
...
...
Page 5
Page 6
Martin ...
Pica ...
Jones ...
Smith ...
...
...
Ganio
Jones
Hall
...
...
...
...
...
...
...
Podstawową jednostką zapisu i odczytu w SQL Server jest strona,
która zawiera 8KB danych.
Jeżeli strony te są odpowiednio poukładane,
to serwer może pracować wydajnie 
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – sterta (brak indeksu grupującego)
 Stertę tworzą nieuporządkowane
dane tabeli
 Dane te zapisane są na stronach,
które zawierają odnośniki do
stron poprzedniej i następnej
 Wyszukiwanie danych w tego typu
strukturze
jest
bardzo
nieefektywne, gdyż aby wybrać
pojedynczy
wiersz
należy
przeczytać
wszystkie
strony
tabeli
 Dobrą
praktyką
jest
nie
posiadanie sterty w swojej bazie
danych 
Z uwagi na to, że stertę tworzą fizyczne
dane tabeli, to terminów „tabela bez
indeksu grupującego” i „sterta” możemy
używad zamiennie.
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – indeksy grupujące
 Indeks
grupujący
jest
struktura
drzewiasta,
dokładniej B-drzewo
to
a
 Jej wierzchołkami są strony
zawierające klucz indeksu zaś
liście to „dane” tabeli
 Dzięki takiej budowie dostęp do
danych
może
być
bardzo
efektywny
Na tabeli można założyd tylko jeden indeks
typu CLUSTERED, gdy tak się stanie
mówimy, że tabela jest indeksem
grupującym.
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – indeksy niegrupujące
 Indeks niegrupujący jest to
także B-drzewo, jednakże
strony tego indeksu nie są
danymi tabeli, lecz ich kopią
 identycznie jak przy indeksach
grupujących wierzchołkami są
strony
zawierające
klucz
indeksu
 liście indeksu niegrupującego
nie zawierają danych, znajdują
się na nich jedynie wskaźniki
do tabeli źródłowej
 jeżeli indeksowana przez nas
tabela jest indeksem typu
CLUSTERED, to wskaźnikiem w
indeksie niegrupującym jest
klucz tego indeksu
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – indeksy niegrupujące z kolumnami zawieranymi
 Indeks
niegrupujący
z
kolumnami zawieranymi budową
przypomina
zwykły
indeks
niegrupujący
 Jedyną różnicą między nimi są
liście, a dokładniej w indeksie z
kolumnami
zawieranymi
posiadają
one
nie
tylko
wskaźnik do tabeli źródłowej
lecz także kopię źródłowych
danych
 Dzięki tej różnicy używając
indeksu
z
kolumnami
zawieranymi jesteśmy w stanie
pozbyć
się
kosztownych
operacji typu „KEY LOOKUP”
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – indeksy filtrowane
 Indeksy filtrowane są zostały
wprowadzone wraz z SQL Server
2008
 Jak wskazuje nazwa możemy w nich
użyć filtru w celu wybrania
dokładnie tych rekordów, które
chcemy zindeksować
 Dzięki temu, że indeks zawiera tylko
wybrane rekordy to zajmuje mniej
miejsca na dysku i działa szybciej
 Filtr jest bardzo intuicyjny w
obsłudze przez programistów, gdyż
jest to zwykła klauzula WHERE 
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – widoki indeksowane
 W SQL Server możemy kłaść
indeksy nie tylko na tabelach,
także
bezpośrednio
na
widokach.
 Ponieważ dane dla takiego
widoku
są
bezpośrednio
przechowywane na stronach,
to widok taki nazywamy
widokiem zmaterializowanym
 Aby zindeksować widok musi
on spełnić szereg wymagań, do
najważniejszych z nich można
zaliczyć używanie w widoku
tylko i wyłącznie tabel jako
źródeł danych oraz użycie
opcji SCHEMABINDING
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – indeksy typu COLUMNSTORE
 Indeksy typu columnstore mają być
nowością wprowadzoną wraz SQL Server
Denali (2012)
 Ich budowa wewnętrzna różni się od
budowy
indeksów
przedstawianych
wcześniej
 Każda strona indeksu columnstore może
przechowywać wartości tylko jednej z
kolumn
 Strony indeksu są skompresowane, ale
algorytm kompresji jest inny niż algorytm
kompresji danych wprowadzony w SQL
2008
 Indeks ten ma szereg ograniczeń, a
największym z nich jest brak możliwości
aktualizacji zindeksowanej tabeli !!!
STROJENIE BAZ DANYCH: INDEKSY
Budowa i typy indeksów – czego nie omówiliśmy i dlaczego tak się stało 
 Indeksy z ograniczeniem UNIQUE
 Indeksy typu XML
 Indeksy pełnotekstowe
 Indeksy typów geograficznych i
geometrycznych
STROJENIE BAZ DANYCH: INDEKSY
Strategie indeksowania
 Dobrą praktyką jest zakładanie indeksów
grupujących na wszystkich tabelach w
naszej bazie
 Rozważmy takie wybieranie kolumn dla
klucza indeksu grupującego by pomógł on
nam w wybieraniu dużej ilości wierszy
 Starajmy się aby klucz indeksu grupującego
był jak najkrótszy
 Jeżeli używamy indeksu klastrowego, to jako
jego klucza użyjmy kolumny, która nie
zmienia wartości
 Zawsze gdy mamy taką możliwość używajmy
indeksów typu UNIQUE
 Używajmy indeksów niegrupujących
wybierania pojedynczych wierszy
do
STROJENIE BAZ DANYCH: INDEKSY
Strategie indeksowania
 Rozważmy
możliwość
użycia
indeksów
niegrupujących do wstępnych agregacji lub
pokrycia zapytań
 Nie przesadzajmy z ilością kolumn w indeksach
 Jeżeli łączymy dwie tabele, to połóżmy indeksy
na kolumnach występujących w klauzuli JOIN
 Jeżeli chcemy użyć widoku indeksowanego to
dobrze przemyślmy sprawę
 Jeżeli
chcemy
użyć
indeksu
typu
COLUMNSTORE - tym bardziej przemyślmy
sprawę
 Pamiętajmy, że indeksy mają też złe strony
STROJENIE BAZ DANYCH: INDEKSY
Podsumowanie
 Nieposortowane dane tabeli nazywamy stertą
 Możemy położyć tylko jeden indeks grupujący na
naszej tabeli, dobrze jest robić świadomie
 Dobrym nawykiem jest to, że zawsze kładziemy
indeks grupujący
 Istnieje
wiele
rodzajów
indeksów
niegrupujących, każdy z nich jest przeznaczony
do innych celów
 Indeksy możemy kłaść nie tylko na tabelach
 Dla specyficznych typów danych SQL Server ma
zaprojektowane specjalne rodzaje indeksów

Podobne dokumenty