Sunteți pe pagina 1din 61

BAZE DE DATE

Procesarea interogrilor

Mihaela Elena Breabn

FII 2013-2014

Cuprins
Etapele procesrii interogrilor
Expresii n algebra relaional

Operatori (revizitat)
Expresii
Echivalena expresiilor

Estimarea costului interogrii


Algoritmi pentru evaluarea operatorilor/expresiilor n algebra
relaional

Etapele procesrii interogrilor


Compilarea interogrii

Analiza sintactic

Parsare

Parsare
Preprocesare

Arbore de parsare

Analiza semantic

Preprocesare si rescriere n AR
Selecia reprezentrii algebrice

Generare a planului logic

Generare a planului fizic

Plan logic

Selecia algoritmilor i a ordinii

Plan fizic
Execuia interogrii
metadate

Compilarea
interogrii

Optimizarea
interogrii

Optimizarea interogrilor
interogare SQL

parsare
rspuns

arbore de
parsare

conversie
plan logic al interogrii

Genereaz/transform p.l.
p.l.mbuntit

estimarea dimensiunii
rezultatului

execut
statistici

Pi

alege cel mai bun


{(P1,C1),(P2,C2)...}

estimeaz costuri

dimensiunile planului logic

Genereaz/transform p.f.

generarea planului fizic


{P1,P2,..}
4

Drumul unei interogri


SELECT Theater
FROM Movie M, Schedule S
WHERE
M.Title = S.Title
AND M.Actor=Winger

plan logic iniial

Theater

Parsare/
Conversie

M.Title=S.Title AND M.Actor=Winger

x
Movie

Schedule

Generatorul de planuri logice


aplic rescrieri algebrice

alt plan logic


Theater

alt plan logic


Theater

M.Actor=Winger
M.Title=S.Title

JOIN
Movie

Generatorul
de planuri
logice

M.Title=S.Title

Schedule

x
Movie

M.Actor=Winger

Schedule

Drumul unei interogri


Theater

Theater

S.Title=M.Title

M.Actor=WingerGeneratorul
M.Title=S.Title de planuri
logice
Movie

Schedule Movie

Schedule

cond dac cond


face referire
x
doar la S
R S
6

M.Actor=Winger

Drumul unei interogri


Theater
S.Title=M.Title
M.Actor=Winger
Schedule

Generatorul de
plan fizic

Movie

Generatorul de plan fizic alege


primitivele de execuie
index pe Actor i
Title, tabele nesortate
Theater
LEFT INDEX
S.Title=M.Title
INDEX
Actor=Winger
Schedule
7

Movie

index pe Actor, tabelul


Schedule sortat pe Title,
Theater
SORT-MERGE
S.Title=M.Title

Plan fizic1

INDEX
M.Actor=Winger
Schedule

Movie

Plan fizic 2

Analiza sintactic
Gramatic independent de context

<query> ::= <SFW> | (<query>)


<SFW> ::= SELECT <select_list> FROM <table_list> WHERE <where_cond>
<select_list> ::= <identifier>, <select_list> | <identifier>
<table_list> ::= <identifier>, <table_list> | <identifier >

Rezultatul parsrii: arbore de parsare

Gramatica SQL in forma BNF: http://savage.net.au/SQL/index.html


8

Analiza semantic
Preprocesare

Rescrierea apelurilor la view-uri

Verificarea relaiilor

Verificarea atributelor i a ambiguitii

Verificarea tipurilor

Dac arborele de parsare este valid el este transformat ntr-o expresie cu


operatori din algebra relaional

Operatori n algebra relaional


(revizitat)

ase operatori de baz

Selecia:
Proiecia:
Reuniunea:
Diferena:
Produsul cartezian: x
Redenumirea:

Operatorii iau ca intrare una sau dou relaii i genereaz


o noua relaie

10

Operatorul de selecie

Realaia r

12

23 10

A=B ^ D > 5 (r)

23 10
11

Operatorul de proiecie

Relaia r

A,C

(r)

10

20

30

40

2
12

Operatorul reuniune

Relaiile r i s

s:

B
1
2
1
3

13

Operatorul diferen

Relaiile r i s
A

r-s

B
1
1

14

Produsul cartezian

Relaiile r i s

1
2
r

10
10
20
10

a
a
b
b

rxs

B
1
1
1
1
2
2
2
2

15

10
10
20
10
10
10
20
10

a
a
b
b
a
a
b
b

Operatorul de redenumire
x (E) - returneaz expresia E sub numele X

Dac o expresie E n algebra relaional are aritate n atunci


x ( A1 , A2 ,..., An )

(E )

returneaz rezultatul expresiei E sub numele X i atributele


redenumite n A1 , A2 , ., An .

16

Compunerea operatorilor
A=C(r

1.

2.

x s)
A

rxs

A=C(r

B
1
1
1
1
2
2
2
2

x s)

1
2
2
17

10
10
20
10
10
10
20
10

a
a
b
b
a
a
b
b

10
10
20

a
a
b

Expresii n algebra relaional

Cea mai simpla expresie este o relaie n baza de date


Fie E1 i E2 expresii n algebra relaional; urmtoarele sunt expresii n
algebra relational:

E1

E2

E1 E2

E1 x E2

p (E1), P este un predicat peste atribute din E1

s(E1), S este o list de atribute din E1

x (E1), x este noul nume pentru rezultatul lui E1

18

Exprimarea interogrilor n algebra


relaional

mpumuturile (loan) mai mari de 1200

amount > 1200 (loan)


Numrul mprumutului (loan_number) pentru mprumuturi mai mari de 1200

( amount > 1200 (loan))


Numele clienilor care au un mprumut, un cont sau ambele la banc
loan_number

customer_name

19

(borrower)

customer_name

(depositor)

Interogri

Numele tuturor clienilor care au un mprumut la filiala Perryridge


customer_name

branch_name=Perryridge

borrower.loan_number = loan.loan_number(borrower x loan)))

Numele tuturor clienilor care au un mprumut la filiala Perryridge dar nu


au un cont la nici o filial a bncii
customer_name ( branch_name = Perryridge

( borrower.loan_number = loan.loan_number(borrower x loan)))


customer_name(depositor)
20

Interogri

Numele tuturor clienilor care au un mprumut la filiala Perryridge

customer_name ( branch_name = Perryridge (


borrower.loan_number = loan.loan_number (borrower x loan)))

customer_name( loan.loan_number = borrower.loan_number (

21

branch_name = Perryridge (loan)) x borrower))

Conversia unei interogri la compilare


Arbore de parsare
<Query>
<SFW>

SELECT < select_list >

FROM

< identifier >

< table_list >


< identifier >

title

WHERE

< where_cond >

<Tuple> IN <Query>

StarsIn

< identifier >

( <Query> )

starName
SELECT

< select_list >


< identifier >
name

22

FROM

< table_list >

< identifier >


MovieStar

WHERE

<SFW>
< where_cond >

< identifier > LIKE <Pattern>


birthDate

%1960

Conversia unei interogri la compilare


Arbore n algebra relaional
title

title
starName=name

StarsIn

<where_cond>
<tuple>
<attribute>
starName

23

IN

name

birthdate LIKE %1960

MovieStar

StarsIn

name
birthdate LIKE %1960

MovieStar

Operatori adiionali

Intersecia pe mulimi
Joinul natural
Agregarea
Joinul extern
Teta-joinul

Toi cu excepia agregrii pot fi exprimai utiliznd operatori


de baz

24

Intersecia pe mulimi

Relaiile r i s
A

1
2
1
r

B
2

25

2
3

Joinul natural

Relaiile r i s

1
2
4
1
2

a
a
b
a
b

1
3
1
2
3

a
a
a
b
b

r
A

1
1
1
1
2

r s

r.A, r.B, r.C, r.D, s.E


26

r.B = s.B

s
C

a
a
a
a
b
r.D = s.D

(r x s))

Exemplu

Cea mai mare balan din tabela account

balance(account)

27

account.balance

account.balance < d.balance (account x

d (account)))

Funcii de agregare i operatori

Funcii de agregare:

avg
min
max
sum
count

Operatorul de agregare n algebra relaional


G1 ,G2 , ,Gn

28

F1 ( A1 ), F2 ( A2 ), , Fn ( An )

( E)

E expresie n algebra relaional


G1, G2 , Gn o list de atribute de grupare (poate fi goal)
Fiecare Fi este o funcie de agregare
Fiecare Ai este un atribut

Exemplu

relaia r

7
7
3
10

g sum(c) (r)
sum(c )

27

Care operaii de agregare nu pot fi exprimate pe baza celorlali operatori


relaionali?
29

Join extern
relaia loan
loan_number

branch_name

loan
L-170
L-230

loan

branch_name
Downtown
Redwood

L-170
L-230
L-155

amount
3000
4000

customer_name
Jones
Smith

borrower (join extern stnga)


loan_number

L-170
L-230
L-260
30

Jones
Smith
Hayes

3000
4000
1700

loan_number

borrower (join natural)

loan_number

customer_name

amount

Downtown
Redwood
Perryridge

L-170
L-230
L-260

relaia borrower

branch_name
Downtown
Redwood
Perryridge

amount
3000
4000
1700

customer_name
Jones
Smith
null

Join extern

Join extern dreapta


loan

borrower

loan_number

L-170
L-230
L-155

branch_name

Downtown
Redwood
null

amount

3000
4000
null

customer_name

Jones
Smith
Hayes

Join extern plin

loan

borrower

loan_number

L-170
L-230
L-260
L-155

31

branch_name

Downtown
Redwood
Perryridge
null

amount

3000
4000
1700
null

customer_name

Jones
Smith
null
Hayes

Exemple interogri

Numele clienilor care au un mprumut i un cont la banc


customer_name

(borrower)

customer_name

Numele clienilor care au un mprumut la banc i suma mprumutat


customer_name, loan_number, amount (borrower

(depositor)

loan)

Clienii care au conturi de la mcar cele dou filiale Downtown i Uptown


customer_name

branch_name = Downtown (depositor

customer_name ( branch_name = Uptown (depositor

32

account ))
account))

Echivalena expresiilor

Dou expresii n algebra relaional sunt echivalente dac


acestea genereaz acelai set de tuple pe orice instan a bazei
de date

ordinea tuplelor e irelevant

Obs: SQL lucreaz cu multiseturi

33

n versiunea multiset a algebrei relaionale echivalena se verific relativ


la multiseturi de tuple

Reguli de echivalen
selecia pe baz de conjuncii e echivalent cu o secven de selecii

1.

(E)

( E ))

operaiile de selecie sunt comutative

2.

( E ))

( E ))

ntr-un ir de proiecii consecutive doar ultima efectuat e necesar

3.

L1

L2

((

Ln

( E))))

L1

( E)

seleciile pot fi combinate cu produsul cartezian i teta joinurile

4.

a.
b.
34

(E1 X E2) = E1
E2
1(E1
2 E2) = E1

2 E2

Reguli de echivalen
5.

operaiile de teta-join i de join natural sunt comutative


E1
E2 = E2
E1

6.

a) Operaiile de join natural sunt asociative


(E1 E2) E3 = E1 (E2 E3)
b) Operaiile de teta-join sunt asociative astfel:
(E1
1 E2)
2 3 E3 = E1
1 3 (E2
unde

35

2 implic

atribute doar din E2 i E3

E3)

Reguli de echivalen

36

Reguli de echivalen
Distribuia seleciei asupra operatorului de teta-join

7.
a)

cnd

implic atribute doar din una dintre expresiile (E1) din join.
0

b)

cnd

1 implic

37

E1

E2) = (

0(E1))

numai atribute din E1 i


E1

E2) = (

E2
2

1(E1))

implic numai atribute din E2.


(

(E2))

Reguli de echivalen
Distribuia proieciei asupra teta-joinului

8.
a)

dac

implic numai atribute din L1


L1 L2

( E1

E2 ) (

L1

L2:

( E1 ))

L2

( E2 ))

Fie joinul E1
E2
Fie L1 i L2 mulimi de atribute din E1 i respetiv E2
Fie L3 atribute din E1 care sunt implicate n condiia de join , dar nu sunt n L1 L2,
Fie L4 atribute dinE2 care sunt implicate n condiia de join , dar nu sunt n L1 L2
b)

L1 L2

38

( E1

E2 )

L1 L2

((

L1 L3

( E1 ))

L2 L4

( E2 )))

Reguli de echivalen
9.

Operaiile de reuniune i intersecie pe mulimi sunt comutative

10.

E1 E2 = E2 E1
E1 E2 = E2 E1
Reuniunea i intersecia pe mulimi sunt asociative
(E1
(E1

11.

E2)
E2)

E3 = E1
E3 = E1

Selecia se distribuie peste

(E2
(E2

E3)
E3)

i .

(E1 E2) =
(E1)
(E2)
similar pentru i n locul
(E1 E2) =
similar pentru
12.

in locul , dar nu pentru

Proiecia se distribuie peste reuniune


L(E1

39

(E1) E2

E2) = (

L(E1))

L(E2))

Optimizri
mpingerea seleciilor

Numele clienilor care au un cont la o filial din Brooklyn


customer_name( branch_city = Brooklyn(branch

depositor)))

Pe baza regulii 7a
customer_name (( branch_city =Brooklyn

(account

(branch))

(account

depositor))

Realizarea seleciei n primele etape reduce dimensiunea relaiei care


particip n join

40

Optimizri
mpingerea seleciilor

Numele clienilor cu un cont la o filial din Brooklyn care are balana peste
1000
customer_name( branch_city = Brooklyn

(branch

depositor)))

(account

Regula 6a (asociativitatea la join)


customer_name(( branch_city = Brooklyn

(branch

balance > 1000

account))

balance > 1000

depositor)

A doua form furnizeaz oportunitatea de a efectua selecia devreme


branch_city = Brooklyn (branch)

41

balance > 1000

(account)

42

Optimizri
mpingerea proieciilor
customer_name(( branch_city = Brooklyn

account)

depositor)

Eliminarea atributelor care nu sunt necesare din rezultatele intermediare


customer_name ((
account_number

(branch)

(branch)
depositor )

branch_city = Brooklyn

account )

Realizarea devreme a proieciei reduce dimensiunea relaiilor din join

43

Optimizri
Ordonarea joinurilor

Pentru orice relaii r1, r2, si r3,


(r1 r2) r3 = r1 (r2 r3 )
Dac r2 r3 are dimensiuni mari i r1 r2 e de dimensiuni mai mici, alegem
(r1 r2) r3
Exemplu

(branch))
(account depositor))
Numai un mic procent din clieni au conturi n filiale din Brooklyn deci e mai
bine s se execute mai nti
customer_name

((

branch_city = Brooklyn

(branch) account
Pentru n relaii exist (2(n 1))!/(n 1)! ordonri diferite pentru join.
branch_city = Brooklyn

n = 7 -> 665280, n = 10 ->176 billion!

Pentru a reduce numrul de ordonri supuse evalurii se utilizeaz


programarea dinamic
44

Estimarea costurilor

lr: dimensiunea unui tuplu din r.


nr: numrul de tuple n relaia r.
br: numrul de blocuri coninnd tuple din r.
fr: factorul de bloc al lui r nr. de tuple din r ce intr ntr-un bloc
Dac tuplele lui r sunt stocate mpreun ntr-un fiier, atunci:
br

nr
fr

V(A, r): numrul de valori distincte care apar in r pentru atributul A; e


echivalent cu dimensiunea proieciei A(r) (pe seturi).

45

Estimarea dimensiunii seleciei


A=v(r)

nr / V(A,r) : numrul de nregistrri ce satisfac selecia


pentru atribut cheie: 1
A V(r)

(cazul

V(r)

este simetric)

dac sunt disponibile min(A,r) i max (A,r)

0 dac v < min(A,r)


v min( A, r )
nr .
max( A, r ) min( A, r )

altfel

dac sunt disponibile histograme se poate rafina estimarea anterioar

n lipsa oricrei informaii statistice dimensiunea se consider a fi nr / 2.

46

Estimarea dimensiunii seleciilor complexe

Selectivitatea unei condiii


satisfac i

este si , selectivitatea e si /nr.

Conjuncia (n ipoteza independenei)


2 ...

(r):

nr

s1

s2

2 ...

n (r):

nr

Negaia
(r):

47

nr size( (r))

...

sn

nrn

Disjuncia
1

este probabilitatea ca un tuplu n relaia r s

dac numrul de tuple ce satisfac

1 (1

s
s1
s
) (1 2 ) ... (1 n )
nr
nr
nr

Estimarea dimensiunii joinului

pentru produsul cartezian r x s: nr *ns tuple, fiecare tuplu ocup sr + ss


octei
pentru r s

S=

S este o (super)cheie pentru R: <= ns

48

: nr *ns

nr ns
S = {A} nu e cheie pentru R sau S:
V ( A, s )

nr ns
sau
V ( A, r )

minimul este considerat de acuratee mai mare

dac sunt disponibile histograme se calculeaz formulele anterioare pe fiecare celul pentru
cele dou relaii

Estimarea dimensiunii pentru alte operaii

Proiecia

A(r)

: V(A,r)

Agregarea: AgF(r) : V(A,r)

Operaii pe mulimi

r
r

r-s : nr

Join extern

s : nr + ns.
s : min(nr , ns)

r
r
1

s: dim(r
s) + nr
s = dim(r
s) + nr + ns

(r)

2 (r)

echivalent cu

2 (r)

Estimatorii furnizeaz n general margini superioare

49

Optimizarea planului fizic

50

Estimarea costului la nivelul planului fizic

Costul e n general msurat ca durata de timp necesar pentru returnarea


rspunsului
Accesul la disc este costul predominant
tS = timpul mediu pentru localizarea unui bloc pe disc
tT = timpul mediu de transfer a unui bloc (pentru citire/scriere)
costul CPU e ignorat pentru simplitate
Costul pentru transferul a b blocuri plus S cutri:
b * tT + S * tS

51

Algoritmi pentru selectie

Cutare liniar (full scan)


cost: br * tT + tS
poate fi aplicat indiferent de condiia de selecie, ordonarea
nregistrrilor n fiier, existena indecilor
Cutarea binar
aplicabil pentru condiii de selecie pe atributul dup care e ordonat
fiierul
costul gsirii primului tuplu ce satisface condiia: log2(br) * (tT + tS); dac
exist mai multe tuple se adaug timpul de transfer al blocurilor
Scanarea indexului (index scan)
index primar pe cheie candidat, egalitate: (hi + 1) * (tT + tS)
index primar pe non-cheie, egalitate: hi * (tT + tS) + tS + tT * b
index secundar, egalitate, n tuple returnate: (hi + n) * (tT + tS)
index primar, comparaie: hi * (tT + tS) + tS + tT * b
Index secundar, comparatie?
52

Algoritmi pentru selecii complexe

Conjuncie:

53

. . . n(r)

utilizarea unui index pentru I i verificarea celorlalte condiii


pe msur ce tuplele sunt aduse n memorie
utilizarea unui index multi-cheie
intersecia identificatorilor (pointerilor la nregistrri) returnai
de indecii asociai condiiilor urmat de citirea nregistrrilor

Disjuncie:

...

n (r)

reuniunea identificatorilor (pointerilor la nregistrri) returnai


de indecii asociai condiiilor urmat de citirea nregistrrilor

Algoritmi pentru join

Algoritmi:

join cu bucle imbricate (nested-loop join)


join indexat cu bucle imbricate
join cu fuziune (merge join)
join hash

Alegerea se face pe baza estimrii costului


Sunt necesare estimri realizate la nivelul planului logic

54

Join cu bucle imbricate

Pentru teta-join: r

for each tuplu tr in r do begin


for each tuplu ts in s do begin
if (tr,ts) satisface
adaug tr ts la rezultat
end
end
relaia interioar s
relaia exterioar r

Costul estimat: (nr

55

bs + br)*tT + (nr + br )*tS

Join indexat cu bucle imbricate

Cutrile n index pot nlocui scanarea fiierelor dac:

e un echi-join sau join natural


exist un index pe atributul de join al relaiei interioare

pentru fiecare tuplu tr n relaia exterioar r se utilizeaz indexul pentru


localizarea tuplelor din s care satisfac condiia de join cu tuplul tr.

costul: br (tT + tS) + nr

c este costul parcurgerii indexului pentru a returna s tuple care se potrivesc pentru
un tuplu din r (echivalent cu selecia pe s cu condiia de join)

dac exist indeci pentru ambele relaii, care e preferat drept relaie extern?
Exemplu

56

depositor customer, depositor relaie exterioar


customer are asociat un index primar de tip B+-arbore pe atributul de join customername, cu 20 intrri pe nod
customer: 10.000 tuple(f=25), depositor:5.000 tuple (f=50)
costul: 100 + 5.000 * 5 = 25.100 blocuri transferate i cutri
corespondentul n joinul neindexat:2.000.000 blocuri transferate i 5.100 cutri

Join cu fuziune
Algoritm

1.
2.

se sorteaz ambele relaii n funcie de atributul de join


are loc fuziunea relaiilor

Poate fi utilizat doar pentru echi-joinuri i joinuri naturale


Costul:

br + bs blocuri transferate
+ costul sortrii relaiilor

Join cu fuziune hibrid: o relaie este sortat iar a doua are un index secundar pe

57

atributul de join de tip B+-arbore


relaia sortat fuzioneaz cu intrrile de pe nivelul frunz al arborelui
se sorteaz rezultatul dup adresele tuplelor relaiei nesortate
se scaneaz relaia nesortat n ordinea adreselor fizice i se realizeaz fuziunea cu
rezultatul anterior pentru a nlocui adresele cu tuplele asociate

Join hash

aplicabil pentru echi-join i join natural


o funcie hash h ce ia la intrare atributele de join partiioneaz tuplele
ambelor relaii n blocuri ce ncap n memorie

r1, r2,rn
s1,s2,sn

tuplele din ri sunt comparate doar cu tuplele din si

Cost: 3(br + bs) + 4nh


58

Joinuri complexe

Condiie de tip conjuncie: r

(r

59

bucle imbricate cu verificarea tuturor condiiilor sau


se calculeaz un join mai simplu r
i s i se realizeaz selecia pentru celelalte
condiii

Condiie de tip disjuncie: r

2 ...

2 ...

bucle imbricate cu verificarea condiiilor sau


calculul reuniunii joinurilor individuale (aplicabil numai versiunii set a reuniunii)
1

s)

(r

s)

...

(r

s)

Evaluare expresiilor

Alternative:

Materializarea: (sub)expresiile sunt materializate sub forma unor relaii


stocate pe disc pentru a fi date ca intrare operatorilor de pe nivele
superioare
Pipelining: tuple sunt date ca intrare operaiilor de pe nivele superioare
imediat ce acestea sunt returnate n timpul procesrii unui operator

60

nu e ntotdeauna posibil (sortare, join hash)

varianta la cerere: nivelul superior solicit noi tuple


varianta la productor: operatorul scrie n buffer tuple iar printele scoate din
buffer (la umplerea bufferului exist timpi de ateptare)

Bibliografie

Capitolele 13 i 14 n Avi Silberschatz Henry F. Korth S.


Sudarshan. Database System Concepts. McGraw-Hill
Science/Engineering/Math; 4th edition

Oracle Tuning Guide:


http://docs.oracle.com/cd/B10500_01/server.920/a96533/toc.htm

61

S-ar putea să vă placă și