Systemy zarządzania bazami danych
5. Przetwarzanie zapytań
Przetwarzanie zapytań
• Zapytanie Plan wykonania
• Plan wykonania Wynik
• Przykład:
Select B,D From R,S
Where R.A = “c” S.E = 2 R.C=S.C
R A B C S C D E
a 1 10 10 x 2
b 1 20 20 y 2
c 2 10 30 z 2
d 2 35 40 x 1
e 3 45 50 y 3
Wynik B D
Jaki plan wykonania tego zapytania?
- Oblicz produkt kartezjański - Wybierz pasujące krotki
- Wykonaj rzutowanie
Plan naiwny
RXS R.A R.B R.C S.C S.D S.E a 1 10 10 x 2 a 1 10 20 y 2 .
.
C 2 10 10 x 2 . .
Bingo!
Mamy jednego...
Algebra relacji = logiczny plan wykonania
Plan naiwny
B,D
R.A=“c” S.E=2 R.C=S.CX
R S
Plan sprytniejszy
B,D
R.A = “c”
S.E = 2R S
Złączenie naturalne
R S
A B C (R) (S) C D E
a 1 10 A B C C D E 10 x 2 b 1 20 c 2 10 10 x 2 20 y 2 c 2 10 20 y 2 30 z 2 d 2 35 30 z 2 40 x 1 e 3 45 50 y 3
Plan z użyciem indeksów
Wykorzystaj indeksy na R.A i S.C
(1) Użyj indeksu na R.A żeby wybrać te krotki R, dla których R.A = “c”
(2) Dla każdej znalezionej wartości R.C użyj indeksu na S.C by znaleźć pasujące krotki (3) Odrzuć te krotki S, w których S.E 2
(4) Sklej pasujące krotki z R i S
(5) Zrzutuj pasujące pary na atrybuty BD i
R S
A B C C D E
a 1 10 10 x 2
b 1 20 20 y 2
c 2 10 30 z 2 d 2 35 40 x 1 e 3 45 50 y 3
A C
I1 I2
=“c”
<c,2,10> <10,x,2>
czy =2?
wynik: <2,x>
następna krotka:
<c,7,15>
Analiza składniowa
Transformacja
Zastosuj reguły
Oszacuj wielkość wyniku
Wygeneruj plany fizyczne Oszacuj koszty Wybierz najtańszy
Wykonaj
{(P1,C1),(P2,C2)...}
Pi
wynik zapytanie SQL
drzewo składni
logiczny plan zapytania
poprawiony l.p.z.
l.p.z. + szacunki
statystyki
Schemat
optymalizatora
Przykładowe zapytanie SQL
SELECT title FROM StarsIn
WHERE starName IN ( SELECT name FROM MovieStar
WHERE birthdate LIKE ‘%1960’
);
Drzewo składni
<Zapytanie>
<SFW>
SELECT <SelLista> FROM <FromLista> WHERE <Warunek>
<Atrybut> <NazwaRelacji> <Krotka> IN <Zapytanie>
title StarsIn <Atrybut> (< Zapytanie>) starName <SFW>
SELECT <SelLista> FROM <FromLista> WHERE <Warunek>
<Atrybut> <NazwaRelacji> <Atrybut> LIKE <Wzorzec>
Otrzymane wyrażenie „algebry relacji”
title
StarsIn <warunek>
<krotka> IN
name<atrybut>
birthdate LIKE ‘%1960’Wstępny logiczny plan zapytania
title
starName=nameStarsIn
name
birthdate LIKE ‘%1960’MovieStar
Poprawiony logiczny plan zapytania
titlestarName=name
StarsIn
name
birthdate LIKE ‘%1960’Pytanie:
Przesunąć rzutowanie do StarsIn?
Szacowanie wielkości wyniku
Dobrze znać wielkość StarsIn
MovieStar
Pierwszy plan fizyczny
Parametry: kolejność złączania, ilość RAM, wynikowe atrybuty...
Hash join
Full scan Index unique
scan Parametry:
warunek selekcji,...
StarsIn MovieStar
Szacowanie kosztów
L.P.Z
P1 P2 … Pn C1 C2 … Cn Wybierz najniższy!
Optymalizacje w algebrze relacji
• Reguły transformacji ...
• ... zachowujące semantykę
• Które transformacje są dobre?
– Zachowują semantykę
– Dają szansę na poprawę efektywności – Nie obniżą efektywności
Złączenie naturalne
• Przemienność
R S = S R
• Łączność
(R S) T = R (S T)
• Podobne właściwości dla
– Iloczynu kartezjańskiego – Sumy mnogościowej
– Przecięcia
Właściwości
• Przenoszą nazwy atrybutów do wyniku, więc ich porządek nie ma znaczenia
• Można je zapisywać także jako drzewa
T R
R S S T
R x S = S x R
(R x S) x T = R x (S x T) R U S = S U R
R U (S U T) = (R U S) U T
Łączność i przemienność
R S = S R
(R S) T = R (S T)
Selekcja
p1p2(R) =
p1vp2(R) =
p1 [
p2 (R)][
p1 (R)] U [
p2 (R)]Zbiory a wielozbiory
R = {a,a,b,b,b,c}
S = {b,b,c,c,d}
R U S = ?
• Opcja 1 SUM
R U S = {a,a,b,b,b,b,b,c,c,c,d}
• Opcja 2 MAX
R U S = {a,a,b,b,b,c,c,d}
Opcja 2 (MAX) powoduje prawdziwość:
p1vp2 (R) =
p1(R) UMAX
p2(R)Przykład: R={a,a,b,b,b,c}
p1 spełnione przez a,b; p2 przez b,c
p1vp2 (R) = {a,a,b,b,b,c}
p1(R) = {a,a,b,b,b}
p2(R) = {b,b,b,c}SUM też ma sens (może nawet większy?)
Senators (……) Rep (……)
Ile jest parlamentarzystów z Kalifornii?
T1 =
yr,state Senators; T2 =
yr,state RepsT1 Yr State T2 Yr State 97 CA 99 CA
99 CA 99 CA 98 AZ 98 CA
Trzeba podjąć decyzję
-> Używamy opcji SUM do sumowania wielozbiorów
-> Niektórych reguł nie da się zastosować dla wielozbiorów (np. dla selekcji
alternatywą)
Rzutowanie
Niech: X = zbiór atrybutów Y = zbiór atrybutów XY = X U Y
xy (R) =
x [
y (R)]p = warunek tylko na atrybutach R q = warunek tylko na atrybutach S
m = warunek na atrybutach R i S łącznie
p (R ⋈ S) =[
p (R)] ⋈ S
(R ⋈ S) = R ⋈ [
(S)]Reguły dla i ⋈
pq (R ⋈ S) =[
p (R)] ⋈
q (S)]
pqm (R ⋈ S) =
m([
p (R)] ⋈ [
q (S)])
pvq (R ⋈ S) = [p(R) ⋈ S] U [R ⋈ q (S)]Reguły dla i ⋈
Reguły dla i
x = podzbiór atrybutów R
z = atrybuty w warunku P (też fragment R)
x[
p (R)] =
x{
p[
xzx (R)] }
x = podzbiór atrybutów R y = podzbiór atrybutów S
z = przecięcie zbiorów atrybutów R i S
xy (R⋈
S)=
xy{ [
xz (R)] ⋈ [
yz (S)] }
Reguły dla i ⋈
xy{
p (R⋈
S)} =
xy{
p [
xz’ (R)⋈
yz’ (S)]}
z’ = z U
{
atrybuty użyte w p}
Iloczyn kartezjański, selekcja i rzut
• Analogicznie, bo to szczególny
przypadek złączenia naturalnego, np.
p (R S) =[
p (R)] S
q (R S) = R [
q (S)]
p(R S) =
p(R)
p(S)
p(R S) =
p(R) S =
p(R)
p(S)Reguły dla ,,
p1p2 (R)
p1 [
p2 (R)]
p (R⋈
S) [
p (R)]⋈
SR
⋈
S S⋈
R
x [
p (R)]
x{
p [
xz (R)]}
Które transformacje są do dobre?
Na zdrowy rozum: rób rzuty wcześnie
R(A,B,C,D,E) x={E}
P: (A=3) (B=“cat”)
E {
p (R)} czy
E{
p{
ABE (R)}}
A co jeśli mamy indeks(y) na A i B?
B = “cat” A=3
Przetnij zbiory wskaźników żeby dostać zbiór pasujących krotek
Podsumowanie transformacji
• Mało transformacji zawsze dobrych
• Zwykle dobre: wczesna selekcja
• Inne możliwości
– Eliminacja wspólnych podwyrażeń – Eliminacja duplikatów lub ...
– ... Eliminacja eliminacji duplikatów
Szacowanie kosztu planu wykonania
(1) Szacowanie rozmiaru wyniku
(2) Szacowanie liczby operacji wejścia-wyjścia
Szacowanie wielkości wyniku
• Statystyki dla relacji R
– T(R) : liczba krotek R
– S(R) : liczba bajtów w każdej krotce R
– B(R): liczba bloków zajmowanych przez R – V(R, A) : liczba różnych wartości atrybutu A
Przykład
R A: 20-bajtowy napis B: 4-bajtowy integer C: 8-bajtowa data
D: 5-bajtowy napis
A B C D cat 1 10 a cat 1 20 b dog 1 30 a dog 1 40 c bat 1 50 d
T(R) = 5 S(R) = 37
V(R,A) = 3 V(R,C) = 5 V(R,B) = 1 V(R,D) = 4
Szacunki rozmiaru dla W = R1 R2
T(W) = S(W) =
T(R1) T(R2) S(R1) + S(R2)
S(W) = S(R) T(W) = ?
Szacunki rozmiaru dla W =
A=a(R)
Przykład
R V(R,A)=3
V(R,B)=1 V(R,C)=5 V(R,D)=4
W =
(R) T(W)A B C D cat 1 10 a cat 1 20 b dog 1 30 a dog 1 40 c bat 1 50 d
T(R)
Założenie 1: równomierny rozkład
W =
Z=val(R)
• Rozkład wartości atrybutu selekcjonującego Z jest równomierny wśród V(R,Z)
przyjmowanych wartości
Założenie 2: równomiernie w dziedzinie
W =
Z=val(R)
• Rozkład wartości atrybutu selekcjonującego Z jest równomierny wśród DOM(R,Z)
wartości z dziedziny atrybutu Z
Przykład
R Wg założenia 2:
V(R,A)=3 DOM(R,A)=10 V(R,B)=1 DOM(R,B)=10 V(R,C)=5 DOM(R,C)=10 V(R,D)=4 DOM(R,D)=10 A B C D
cat 1 10 a cat 1 20 b dog 1 30 a dog 1 40 c bat 1 50 d
W =
z=val(R) T(W) = T(R)DOM(R,Z)
C=val T(W) = (1/10)1 + (1/10)1 + ...
= (5/10) = 0.5
B=val T(W)= (1/10)5 + 0 + 0 = 0.5
A=val T(W)= (1/10)2 + (1/10)2 + (1/10)1 = 0.5
Selektywność selekcji ;)
SC(R,A) = średnia liczba rekordów
spełniających warunek równościowy na R.A T(R)
V(R,A) SC(R,A) =
T(R)
DOM(R,A)
A co z W =
z val (R) ?T(W) = ?
• Rozwiązanie 1:
T(W) = T(R)/2
• Rozwiązanie 2:
• Rozwiązanie 3: Oszacuj wartości w zakresie
Przykład R Z
Min=1 V(R,Z)=10 W= z 15 (R)
Max=20
f = 20-15+1 = 6 (ułamek zakresu) 20-1+1 20
T(W) = f T(R)
Szacowanie zakresu
• fV(R,Z) = liczba różnych wartości
T(W) = = f T(R)
• Bardziej dokładnie histogramy wartości
– Problemy z ponownym użyciem planu
[f V(Z,R)] T(R) V(Z,R)
Szacunki rozmiaru dla W = R1 ⋈ R2
x = atrybuty R1 y = atrybuty R2
• Przypadek 1: X Y =
– Tak samo jak R1
R2Przypadek 2: W = R1 ⋈R2 gdy XY={A}
R1 A B C R2 A D
Założenie (zależność inkluzyjna):
V(R1,A) V(R2,A) Każda wartość R1.A jest także w R2.A
V(R2,A) V(R1,A) Każda wartość R2.A jest
R1 A B C R2 A D
Szacunek T(W)
gdy V(R1,A) V(R2,A)
Weź1 krotkę Dopasuj
1 krotka pasuje do T(R2) krotek V(R2,A)
więc T(W) = T(R2) T(R1) V(R2, A)
Wielkość złączenia
• V(R1,A) V(R2,A) T(W) = T(R2) T(R1)
V(R2,A)
• V(R2,A) V(R1,A) T(W) = T(R2) T(R1) V(R1,A)
Przy rownomierności w dziedzinie
R1 A B C R2 A D
Ta krotka pasuje do T(R2)/DOM(R2,A) krotek, więc
T(W) = T(R2) T(R1) = T(R2) T(R1)
DOM(R2, A) DOM(R1, A)
Wielkość krotki wyniku (zawsze)
S(W) = S(R1) + S(R2) - S(A)
rozmiar atrybutu A
Pośrednie szacunki T,S,V też potrzebne
Np. W = [
A=a (R1) ]⋈
R2Relacja U
T(U) = T(R1)/V(R1,A) S(U) = S(R1) Potrzebne też V (U, *) !!
Przykład
R1 V(R1,A)=3
V(R1,B)=1 V(R1,C)=5 V(R1,D)=3
U =
A=a (R1)A B C D cat 1 10 10 cat 1 20 20 dog 1 30 10 dog 1 40 30 bat 1 50 10
V(U,A) =1 V(U,B) =1 V(U,C) = T(R1)
V(R1,A)
Przybliżenia dla U =
A=a(R)
• Atrybut selekcji V(U,A) = 1
• Klucz
V(U,K) = T(U)
• Inne: ?
V(U,B) = V(R,B)
Dla złączeń U = R1(A,B) ⋈ R2(A,C)
• Zachowywanie zbiorów wartości:
V(U,A) = min { V(R1, A), V(R2, A) } V(U,B) = V(R1, B)
V(U,C) = V(R2, C)
Z = R1(A,B) ⋈ R2(B,C) ⋈ R3(C,D)
• Przykładowe statystyki
R1: T(R1) = 1000 V(R1,A)=50 V(R1,B)=100 R2: T(R2) = 2000 V(R2,B)=200 V(R2,C)=300 R3: T(R3) = 3000 V(R3,C)=90 V(R3,D)=500
T(U) = 10002000 V(U,A) = 50 200 V(U,B) = 100
V(U,C) = 300
Częściowy wynik U = R ⋈ S
Z = U ⋈ R3
T(Z) = 100020003000 V(Z,A) = 50 200300 V(Z,B) = 100
V(Z,C) = 90 V(Z,D) = 500
☺
Na szczęście wynik też nie zależy od kolejności złączeńPodsumowanie szacowania
• Szacowanie wielkości wyniku jest sztuką (trochę tajemną)
• Nie zapomnieć o:
– okresowej aktualizacji statystyk (koszty?)