Documente Academic
Documente Profesional
Documente Cultură
Procesarea interogrilor
Cuprins
Etapele procesrii interogrilor
Expresii n algebra relaional
Operatori (revizitat)
Expresii
Echivalena expresiilor
Analiza sintactic
Parsare
Parsare
Preprocesare
Arbore de parsare
Analiza semantic
Preprocesare si rescriere n AR
Selecia reprezentrii algebrice
Plan logic
Plan fizic
Execuia interogrii
metadate
Compilarea
interogrii
Optimizarea
interogrii
Optimizarea interogrilor
interogare SQL
parsare
rspuns
arbore de
parsare
execut
conversie
plan logic al interogrii
Genereaz/transform p.l.
p.l.mbuntit
estimarea dimensiunii
rezultatului
statistici
Pi
estimeaz costuri
Genereaz/transform p.f.
Analiza sintactic
Gramatic independent de context
Analiza semantic
Preprocesare
Verificarea relaiilor
Verificarea tipurilor
Analiza semantic
Rescriere n AR (1)
<Query>
<SFW>
FROM
title
WHERE
<Tuple> IN <Query>
StarsIn
( <Query> )
starName
SELECT
name
7
FROM
MovieStar
WHERE
<SFW>
< where_cond >
birthDate
%1960
Analiza semantic
Rescriere n AR (2)
title
title
starName=name
StarsIn
<tuple>
<attribute>
starName
8
<where_cond>
IN
name
StarsIn
name
birthdate LIKE %1960
MovieStar
Analiza semantic
Optimizarea planului logic
SELECT Theater
FROM Movie M, Schedule S
WHERE
M.Title = S.Title
AND M.Actor=Winger
Parsare/
Conversie
p Theater
Schedule
p Theater
M.Actor=Winger
M.Title=S.Title
JOIN
Movie
x
Movie
Generatorul
de planuri
logice
Schedule
M.Actor=Winger
M.Title=S.Title
x
Movie
p Theater
Schedule
Analiza semantic
Optimizarea planului logic
p Theater
p Theater
M.Actor=Winger
S.Title=M.Title
Generatorul
M.Title=S.Title de planuri
logice
Movie
M.Actor=Winger
Schedule Movie
Schedule
doar la S
Analiza semantic
Optimizarea planului fizic
p Theater
S.Title=M.Title
Schedule
M.Actor=Winger
Generatorul de
plan fizic
Movie
Movie
Plan fizic1
INDEX
M.Actor=Winger
Schedule
Movie
Plan fizic 2
Selecia:
Proiecia:
Reuniunea:
Diferena:
Produsul cartezian: x
Redenumirea:
12
Operatorul de selecie
Realaia r
13
12
23 10
23 10
Operatorul de proiecie
Relaia r
A,C (r)
14
10
20
30
40
Operatorul reuniune
Relaiile r i s
r s:
15
Operatorul diferen
Relaiile r i s
A
r-s
16
Produsul cartezian
Relaiile r i s
10
10
20
10
a
a
b
b
rxs
17
1
1
1
1
2
2
2
2
10
10
20
10
10
10
20
10
a
a
b
b
a
a
b
b
Operatorul de redenumire
18
Compunerea operatorilor
A=C(r x s)
1. r x s
2.
19
A=C(r x s)
1
1
1
1
2
2
2
2
10
10
20
10
10
10
20
10
a
a
b
b
a
a
b
b
1
2
2
10
10
20
a
a
b
E1 E2
E1 E2
E1 x E2
20
Interogri
customer_name (branch_name=Perryridge
(borrower.loan_number = loan.loan_number(borrower x loan)))
customer_name(depositor)
22
Interogri
23
Operatori adiionali
Intersecia pe mulimi
Joinul natural
Agregarea
Joinul extern
Teta-joinul
24
Intersecia pe mulimi
Relaiile r i s
A
1
2
1
r
rs
25
2
3
s
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
1
1
1
1
2
a
a
a
a
b
r s
r.A, r.B, r.C, r.D, s.E (r.B = s.B r.D = s.D (r x s))
26
Agregare
Exemplu
balance(account) - account.balance
27
Funcii de agregare:
avg
min
max
sum
count
var
28
F ( A ), F ( A ),
1
, Fn ( An )
(E)
Agregare
Exemplu
relaia r
10
g sum(c) (r)
sum(c )
27
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
L-170
L-230
L-260
30
Jones
Smith
Hayes
3000
4000
1700
loan_number
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
borrower
loan_number
L-170
L-230
L-155
branch_name
Downtown
Redwood
null
amount
3000
4000
null
customer_name
Jones
Smith
Hayes
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
loan)
32
account ))
account))
Echivalena expresiilor
33
Reguli de echivalen
selecia pe baz de conjuncii e echivalent cu o secven de selecii
1.
( E ) ( ( E ))
1
2.
( ( E )) ( ( E ))
1
3.
L1 ( L2 (( Ln ( E )))) L1 ( E )
seleciile pot fi combinate cu produsul cartezian i teta joinurile
4.
a. (E1 X E2) = E1 E2
b. 1(E1 2 E2) = E1 1 2 E2
34
Reguli de echivalen
5.
6.
35
Reguli de echivalen
36
Reguli de echivalen
Distribuia seleciei asupra operatorului de teta-join
7.
a)
cnd 0 implic atribute doar din una dintre expresiile (E1) din join:
0E1
b)
E2
cnd 1 implic numai atribute din E1 i 2 implic numai atribute din E2:
1 E1
37
E2) = (0(E1))
E2) = (1(E1))
( (E2))
Reguli de echivalen
Distribuia proieciei asupra teta-joinului
8.
a)
L1 L2 ( E1
E2 ) ( L1 ( E1 ))
( L2 ( E2 ))
Fie joinul E1 E2
Fie L1 i L2 mulimi de atribute din E1 i respectiv 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 ( E1
38
E2 ) L1 L2 (( L1 L3 ( E1 ))
( L2 L4 ( E2 )))
Reguli de echivalen
9.
10.
E1 E2 = E2 E1
E1 E2 = E2 E1
Reuniunea i intersecia pe mulimi sunt asociative
(E1 E2) E3 = E1 (E2 E3)
(E1 E2) E3 = E1 (E2 E3)
11.
(E1
(E1
E2) = (E1) E2
39
Optimizri
mpingerea seleciilor
customer_name(branch_city = Brooklyn(branch
(account
Pe baza regulii 7a
depositor)))
(account
depositor))
40
Optimizri
mpingerea seleciilor
Numele clienilor cu un cont la o filial din Brooklyn care are balana peste
1000
41
42
Optimizri
mpingerea proieciilor
customer_name((branch_city = Brooklyn (branch)
depositor)
customer_name ((
account_number (branch_city = Brooklyn (branch)
depositor )
account)
account )
43
Optimizri
Ordonarea joinurilor
Estimarea costurilor
nr
br
f r
45
A=v(r)
altfel
46
Disjuncia
Negaia
nr
s1 s2 . . . sn
nrn
s
s
s
1 2 . . . n (r): nr 1 (1 1 ) (1 2 ) ... (1 n )
nr
nr
nr
(r):
47
nr size((r))
R S = : nr * ns
48
sau nr ns
V ( A, r )
V ( A, s )
dac sunt disponibile histograme se calculeaz formulele anterioare pe fiecare celul pentru
cele dou relaii
Operaii pe mulimi
r s : nr + ns.
r s : min(nr , ns)
r-s : nr
Join extern
r
r
s: dim(r
s) + nr
s = dim(r
s) + nr + ns
49
50
51
Cutarea binar
cost: br * tT + tS
dac selecia e pe un atribut cheie, costul estimativ: br/2 * tT + tS
poate fi aplicat indiferent de condiia de selecie, ordonarea
nregistrrilor n fiier, existena indecilor
52
Conjuncie: 1 2. . . n(r)
Disjuncie: 1 2 . . . n (r)
53
reuniunea identificatorilor
Algoritmi:
54
Pentru teta-join: r
55
c este costul parcurgerii indexului pentru a returna tuple din s care se potrivesc
pentru un tuplu din r (echivalent cu selecia pe s cu condiia de join)
dac exist indeci pentru ambele relaii, relaia cu mai puine tuple va fi preferat
drept relaie exterioar n join
Exemplu
56
Join cu fuziune
Algoritm
1.
2.
br + bs blocuri transferate
+ costul sortrii relaiilor
Join cu fuziune hibrid: o relaie este sortat iar a doua are un index secundar pe
57
Join hash
r1, r2,rn
s1,s2,sn
58
Joinuri complexe
(r
59
1 2... n
1 2 ... n s
(r
s) . . . (r
s)
Eliminarea duplicatelor
60
Evaluare expresiilor
Alternative:
61
Planuri de executie
Oracle
Inregistreaza planul:
EXPLAIN PLAN
[SET STATEMENT_ID = <id>]
[INTO <table_name>]
FOR <sql_statement>;
Vizualizeaza planul:
SELECT * FROM table(dbms_xplan.display);
sau
select * from plan_table [where statement_id = <id>];
http://www.oracle.com/technetwork/database/bi-datawarehousing/twpexplain-the-explain-plan-052011-393674.pdf
62
Planuri de executie
Oracle-statistici
Table statistics
Column statistics
Index statistics
Number of rows
Number of blocks
Average row length
System statistics
63
Planuri de executie
Colectarea statisticilor
GATHER_INDEX_STATS
GATHER_TABLE_STATS
GATHER_SYSTEM_STATS
GATHER_DATABASE_STATS
GATHER_SCHEMA_STATS
Index statistics
http://docs.oracle.com/cd/B10500_01/server.920/a96533/stats.htm
64
Planuri de executie
Hints
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements006.htm
65
Bibliografie
66