Professional Documents
Culture Documents
Plan wykadu
Wykonywanie zapyta Indeksowanie Partycjonowanie Zalecenia dla twrcw bazy danych (zbir dobrych praktyk)
Wykonywanie zapyta
Kompilacja zapytania Wykonywanie zapytania
Zapytanie
SELECT C.CustomerID, COUNT(O.OrderID) AS NumOrders FROM dbo.Customers AS C LEFT OUTER JOIN dbo.Orders AS O ON C.CustomerID = O.CustomerID WHERE C.City = 'London' GROUP BY C.CustomerID HAVING COUNT(O.OrderID) > 5 ORDER BY NumOrders;
Plan zapytania
Drzewa
Drzewo skada si z wzw Kady wze oprcz korzenia ma jednego przodka i moe mie rn liczb potomkw Korze nie ma przodka Wze, ktry nie ma potomkw jest liciem Poziom wza jest zawsze wikszy o 1 ni poziom jego przodka, poziom korzenia = 0
Przeszukiwanie B+ drzewa
Przeszukiwanie B+ drzewa polega na porwnywaniu wartoci klucza w drzewie. Przykad: znajd warto 45 i 15 w poniszym drzewie.
Przeszukiwanie
Rezultat: 1. Wartoci 45 nie ma w drzewie. 2. Dla wartoci 15 zwrcona zostanie pozycja wskanika.
Wstawianie
Jeli wstawianie do B+ drzewa spowoduje, e drzewo nie bdzie zbalansowane, wwczas nastpuje przebudowa drzewa. Przykad #1 : wstawianie 28 do drzewa.
Wstawianie
Rezultat:
Wstawianie
Przykad #2: wstawianie 70 do drzewa
Wstawianie
Reorganizacja drzewa
50
55
60
65
70
50
55
60
65
70
Wstawianie
Rezultat: wybieranie rodkowego klucza 60, i umieszczenie go w wierzchoku indeksu pomidzy 50 i 75.
Wstawianie
Przykad #3: dodawanie wartoci klucza 95 do drzewa.
75 80 85 90 95
Naruszenie reguy 50%, podzielenie licia
75 80
85 90 95
25 50 60 75 85
Wstawianie
Rezultat: wstawienie wartoci klucza 60 do wza indeksowego i reorganizacja drzewa.
Tak
Tak
Usuwanie
Zasady podobne do wstawiania, B+ drzewo musi by przebudowane przy zaamaniu reguy 50%. Przykad #1: usunicie 70 z drzewa
To jest OK. 60 65
Usuwanie
Rezultat:
Usuwanie
Przykad #2: usunicie 25 z drzewa, przy czym 25 pojawia si na stronie indeksu.
Ale
28 30 To jest OK.
Usuwanie
Rezultat: zastpienie przez 28 na stronie indeksu.
Dod. 28
Usuwanie
Przykad #3: usuwanie 60 z drzewa
65 50 55 65
Zamanie reguy 50%
Usuwanie
Rezultat: usuniecie 60 ze strony indeksowej i reorganizacja grafu.
Usu rekord ze strony danych. Jeli klucz pojawia si w stronie indeksu, zamie go przez nastpny klucz. Przenie dane ze strony, z ktrych usunito dane do strony ssiedniej. Zmie stron indeksu tak, aby odzwierciedli zmian w liciach. Przenie dane ze strony, z ktrych usunito dane do strony ssiedniej. Zmie stron indeksu tak, aby odzwierciedli zmian w liciach. Przenie dane indeksowe do strony ssiedniej. Dostosuj stron indeksow poziom wyej do powyszych zmian. Algorytm powinien by kontynuowany do momentu, gdy strona indeksu bdzie poniej wspczynnika wypenienia
Tak
Nie
Tak
Tak
Indeks nieklastrowy:
moe by wicej ni jeden w tabeli; w liciach nie ma danych tylko s wskaniki do danych; create nonclustered index nazwa_indeksu on tabela (kolumna1,)
Indeks klastrowy
Indeks nieklastrowy
Indeksy a zapytania
Czsto zmian w bazie ma wpyw na wydajno indeksw Lepiej modyfikowa du paczk danych na raz ni robi kilka zapyta. W pierwszym przypadku indeksy bd reorganizowane tylko raz. Naley uywa indeksw nieklastrowych na kolumnach, ktre bd bray udzia w instrukcjach zczenia. Naley uywa indeksw nieklastrowych w przypadku, gdy bdzie czsto wykonywana instrukcja WHERE na tych kolumnach.
Transakcje
Transakcje powinny by krtkie. Im krtsza transakcja tym krtsze s blokady na danych. To z kolei zwiksza wydajno. Nie naley uywa transakcji do odczytywania danych. Tam gdzie to moliwe powinien by niski poziom transakcji. Transakcje nie powinny by otwarte podczas oczekiwania na reakcj uytkownika. Transakcje powinny by rozpoczynane i koczone jawnie.
Transakcje - przykad
Przykad: Tworzenie nowej faktury Scenariusz #1:
1) Rozpoczcie transakcji 2) Dodanie faktury 3) Dodanie elementw faktury 4) Zatwierdzenie faktury 5) Zatwierdzenie transakcji
Scenariusz #2:
1) Dodanie faktury 2) Dodanie elementw faktury 3) Rozpoczcie transakcji 4) Zatwierdzenie faktury 5) Zakoczenie transakcji
Scenariusz #2: krcej s dane blokowane podczas transakcji. Scenariusz #1: Wewntrz transakcji naley czeka na reakcj uytkownika.
Partycjonowanie
Partycjonowanie jest fizycznym podziaem danych pomidzy rne pliki bazy danych Partycjonowa mona tabele i indeksy bazy danych Uytkownik bazy danych nie jest wiadomy tego, czy struktura jest podzielona czy te nie jest. Partycjonowanie nie ma wpywu na zapytania SQL.
Korzyci z partycjonowania
Podniesienie skalowalnoci i zarzdzania tabelami o duych rozmiarach (rzdu kilkuset megabajtw) Lepszy dostp do danych Moliwo wykorzystania wieloprocesorowych serwerw (kady procesor moe wwczas obsugiwa rne partycje) Przykad:
Dana jest tabela sprzeda posiadajca rekordy dotyczce sprzeday z wielu miesicy. Zakadamy, e dzielimy tabel po miesicu. Na ostatnim miesicu s wykonywane czste modyfikacje, a z poprzednich tylko odczyt.
Modyfikacje z ostatniego miesica nie maja wic wpywu na wydajno z miesicy poprzednich.
Konfigurowanie partycjonowania
Tworzenie funkcji partycji:
CREATE PARTITION FUNCTION [Data Partition Range](int) AS RANGE LEFT FOR VALUES (100000)
Dodawanie danych
declare @count int set @count =1 while @count <=100 begin insert into MyTable select @count,getdate(),100.00 set @count=@count+1 end set @count =100002 while @count <=100202 begin insert into MyTable select @count,getdate(),200.00 set @count=@count+1 end
Odczyt danych
Partycjonowanie nie ma wpywu na polecenia SQL:
select * from MyTable
Dzikuj