0% ont trouvé ce document utile (0 vote)
42 vues71 pages

10 - Optimisation Des Requêtes

Transféré par

ibrahimasamba.diop
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
42 vues71 pages

10 - Optimisation Des Requêtes

Transféré par

ibrahimasamba.diop
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Réda Dehak [email protected].

fr
Traitement des requêtes

Requête

Plan d’exécution

Plan d’exécution : définit l’ensemble des


opérations (algorithmes) à exécuter pour
déterminer la réponse

Optimisation des requêtes Le meilleur plan


Réda DEHAK 2
Exemple

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 Réponse B D
e 3 45 50 y 3
2 x
Réda DEHAK 3
Comment?

• Idées :
1. Faire un produit cartésien
Sélectionner les tuples
Faire une projection

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
. . . . . .
Réda DEHAK
. . . . . . 4
Description des plans

• Algèbre relationnel :

B,D

R.A = “c” ∧
S.E = 2 ∧ ΠB,D [ σR.A=“c”∧ S.E=2 ∧ R.C = S.C (RXS)]
R.C=S.C

R S
Réda DEHAK 5
Plan II

B,D

R.A = “c” S.E = 2

R S

ΠB,D [ Join ( σR.A="c" ( R ) , σS.E=2 ( S ) ) ]


Réda DEHAK 6
Plan II
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


B D
Réda DEHAK 2 x 7
Plan III

• Utilisation des indexes sur R.A et S.C


(1) Utiliser l’indexe sur R.A pour sélectionner les tuples de R vérifiant R.A
= "c"
(2) Utiliser l’indexe sur S.C pour sélectionner les tuples correspondants à
chaque tuple de R.
(3) Éliminer les tuples tel que S.E ≠ 2
(4) Projeter sur B,D

Réda DEHAK 8
Plan III

R S
A=“c” C
A B C I1 I2 C D E
a 1 10 10 x 2
<c,2,10> <10,x,2>
b 1 20 20 y 2
c 2 10 check=2? 30 z 2

d 2 35 output: <2,x> 40 x 1
e 3 45 50 y 3

next tuple:
<c,7,15>
Réda DEHAK 9
Problèmes

• Pour chaque requêtes :


– Comment déterminer un plan d’exécution?
– Comment évaluer le coût de chaque plan?

• Idéalement : trouver le meilleur plan


• Pratiquement : éviter les mauvais plans
• Les algorithmes utilisés pour évaluer une opération de base

Réda DEHAK 10
Plan

• Exécution d’une requête


– Étude des différents algorithmes
• Compilation des requêtes :
– Déterminer un plan logique.
– Déterminer le meilleur plan physique.

Réda DEHAK 11
Architecture d’un SGBD
Requêtes SQL

Plan d’exécution Parser


Évaluation
des
requêtes Évaluation des
Optimisation
opérateurs

Gestionnaire des Méthodes d’accès et fichiers


transactions
Gestionnaire du tampon
Gestion de la concurrence Récupération

Gestionnaire des Gestionnaire de l’espace


verrous disque

SGBD
Base de données Index, données
Réda DEHAK 12
Évaluation d’une requête
• Les principales composantes du query processor

Requête SQL

Parser
Arbre syntaxique

Détermination du meilleur plan


logique
Arbre correspondant au
plan logique
Détermination du meilleur plan
physique
Arbre correspondant au
plan physique
Réda DEHAK
Plan d’exécution 13
Opérations

C L
x C

Sélection Projection Produit cartésien Jointure

L - ∪ ∩

Renommage Différence Union Intersection

Réda DEHAK 14
Opérateurs supplémentaires

• Élimination des doublons :


δ : transformer le multi-set en ensemble.
• Grouper
γ Liste : La liste permet de spécifier les attributs du groupe ainsi que les
différents opérateurs d’agrégation.
• Tri :
Sortliste_attributs

Réda DEHAK 15
Exemples
Select nomrea, min(année) as minannée
From film
Group by nomrea
Having count(titre) >= 3

Πnomrea,minanne ( σcttitre>=3[ γnomrea,


min(année)àminannée, count(titre)àcttitre(film) ] )

Réda DEHAK 16
Exemples
Select distinct nomrea
From film

δ [ Πnomrea ( film ) ]


Πnomrea ( δ (film) )

Réda DEHAK 17
Classification des algorithmes
1. Algorithmes en 1 passe
2. Algorithmes en 2 passes
3. Algorithmes en multi-passes

4. Méthodes classiques
5. Méthodes fondées sur le tri
6. Méthodes fondées sur le hachage
7. Méthodes fondées sur les indexes

Réda DEHAK 18
Étude des performances

• Card( R ) : nombre de tuples de la table R


• B( R ) : nombre de blocs physique de la table R.
• Card( R, A ) : nombre de valeurs différentes contenues
dans R pour l’attribut (s) A.
• M : nombre de blocs mémoires nécessaire.

Réda DEHAK 19
Méthodes classiques
Algorithme en 1 passe pour les
opérateurs unaires
1. Un tuple à la fois :

Condition M = 1
Nbre I/O : B( R )
R
Sélection
Projection

Opérateur
unaire

Buffer d’entrée Buffer de sortie

Réda DEHAK 21
Algorithme en 1 passe pour les
opérateurs unaires
• Élimination des doublons :

Condition B(δ (R) ) < M


Nbre I/O : B( R )
R

Déjà VU?

Buffer d’entrée
Buffer de sortie
M-1 buffers
Réda DEHAK 22
Grouper γ

Condition B(δ (γ<> ( R )) ) < M


Nbre I/O : B( R )
R

Groupe déjà vu?

Buffer d’entrée M-1 buffers

Réda DEHAK 23
Algorithme en 1 passe pour les
opérateurs binaires
• Union :
– Multiset : Évidente (M=1, B(R) + B(S))
– Ensemble.
• Intersection (Multiset, Ensemble).
• Différence (Multiset, Ensemble).
• Produit cartésien.
• Jointure.

Réda DEHAK 24
Algorithme en une passe

Idée : Charger la petite table entièrement en mémoire.

R&S

Traitement

Si Output
buffer

Disk M main memory buffers

Réda DEHAK 25
Algorithme en 1 passe pour les
opérateurs binaires
• Union :
– Multiset : Évidente (M=1, B(R) + B(S))
– Ensemble.
• Intersection (Multiset, Ensemble).
• Différence (Multiset, Ensemble).
• Produit cartésien.
• Jointure.

Condition Min( B(S), B(R) ) < M


Nbre I/O : B( R ) + B(S)
Réda DEHAK 26
Exemple : jointure
• 2 boucles imbriquées (tuples):
Join(R(X,Y), S(Y,Z))
For EACH tuple s IN S DO
FOR EACH tuple r IN R DO
IF r.Y == s.Y then
output join(r,s)
• 2 Possibilités :
1. Pour chaque tuple de S lire toutes les pages de R
Nbre d’IO : B(S) + card(S) * B(R)
2. Pour chaque page de S lire toutes les pages de R
Nbre d’IO : B(S) * (1 + B(R))

Réda DEHAK 27
Algorithme en :
une passe sur R
Plusieurs passe sur S

R&S

Lecture de Output
toutes les buffer
pages de S

Disk M main memory buffers

Réda DEHAK 28
Exemple : jointure
• 2 boucles imbriquées (tuples):
Join(R(X,Y), S(Y,Z))

For EACH tuple s IN S DO


FOR EACH tuple r IN R DO
IF r.Y == s.Y then
output join(r,s)

Condition M=2
Nbre I/O : (1 + B( R )) * B(S)
Réda DEHAK 29
Exemple : jointure

• 2 boucles imbriquées (blocs) :


Join(R(X,Y), S(Y,Z))
Idée : utiliser toute la mémoire disponible pour faire la jointure
décomposer S en plusieurs relations Si (i=1..n) de taille (M-1) blocs

FOR EACH i IN [1..n] DO


lire Si en mémoire (rajouter une structure de recherche pour accélérer la suite)
FOR EACH bloc b OF R DO
lire b en mémoire
FOR EACH tuple t OF b DO
Rechecher les tuples de Si (en mémoire) qui match avec t
output join(r,s)

Réda DEHAK 30
Algorithme en :
une passe sur R
Plusieurs passes sur S

R&S

Si

Lecture de Output
tous Rj buffer

Disk M main memory buffers

Réda DEHAK 31
Exemple : jointure

• 2 boucles imbriquées (blocs):


Join(R(X,Y), S(Y,Z))
Idée : utiliser toute la mémoire disponible pour faire la jointure
décomposer S en plusieurs relations Si (i=1..n) de taille (M-1) blocs

FOR EACH i IN [1..n] DO


lire Si en mémoire (rajouter une structure de recherche pour accélérer la suite)
FOR EACH bloc b OF R DO
lire b en mémoire
FOR EACH tuple t OF b DO
Rechecher les tuples de Si (en mémoire) qui match avec t
output join(r,s)

Condition M>=2
Nbre I/O : B( R ) * B(S) / (M-1)
Réda DEHAK 32
Conclusion

Opérateurs M nécessaire I/O

σ, Π 1 B

γ, δ B B

∩, ∪, -, x, Join Min(B(R), B(S)) B(R) + B(S)

Join ∀≥2 B(R) B(S) /(M-1)

Réda DEHAK 33
Algorithme en 2 passes fondés sur les
méthodes de tri

• Les données sont lues une première fois :


– Elles sont traitées en mémoire
– Transférer vers le disque

• Les données sont lues une deuxièmes fois pour calculer


le résultat

Réda DEHAK 34
Exemples : tri en 2 passes

• Tri fusion :
1. On subdivise R en plusieurs sous ensembles Ri (i=1..n)
2. On trie indépendamment chaque sous relation Ri
3. On fusionne toute les sous relations triées

Réda DEHAK 35
Exemples : tri en 2 passes

R
Trier en fusionnant

Réda DEHAK
M buffers 36
Exemples : tri en 2 passes

• Tri fusion :
1. On subdivise R en plusieurs sous ensembles Ri (i=1..n)
2. On trie indépendamment chaque sous relation Ri
3. On fusionne toute les sous relations triées

Condition B( R ) <= M2
Nbre I/O : 3 B( R )

Réda DEHAK 37
Applications

• L’algorithme peut calculer le résultat des deux


opérateurs δ, γ, en modifiant la deuxième phase.

Condition B( R ) <= M2
Nbre I/O : 3 B( R )

Réda DEHAK 38
Opérateurs binaires
Union :
• Première phase :
– Trier chaque sous relation Ri (taille M blocs) de R en mémoire.
– Trier chaque sous relation Sj (taille M blocs) de S en mémoire.
• Deuxième phase :
– Lire un bloc de chaque sous relation Ri et Sj en mémoire.
– Faire l’union en traitant chaque bloc.

Idem pour ∩, - , Join


Réda DEHAK 39
Jointure en 2 passes fondés sur les
méthodes de tri

deuxième phase

Sorted partitions
of R & S Join Result

Ri

Output
Si buffer

Disk M main memory buffers Disk

Réda DEHAK 40
Opérateurs binaires
Union :
Condition B( R ) + B(S) <= M2
• Première phase :
Nbre
– Trier chaque sous relation Ri (taille M I/O : 3de[ RB(enRmémoire.
blocs) ) + B(S) ]
– Trier chaque sous relation Sj (taille M blocs) de S en mémoire.
• Deuxième phase :
– Lire un bloc de chaque sous relation Ri et Sj en mémoire.
– Faire l’union en traitant chaque bloc.

Idem pour ∩ , - , Join


Réda DEHAK 41
Conclusion

Opérateurs M nécessaire I/O

γ, δ B 3B

∩, ∪, -, x, Join B ( R) + B ( S ) 3(B(R) + B(S))

Join MAX (B( R), B(S )) 5(B(R) + B(S))

Réda DEHAK 42
Algorithme en 2 passes fondés sur les
méthodes de hachage

Idée : Partitionner R et S en (M-1) sous relation avec


une fonction de hachage
Original
Relation OUTPUT Partitions
1

1
INPUT 2
hash 2
function
... h M-1
M-1

Disk M main memory buffers Disk

Réda DEHAK 43
Algorithme en 2 passes fondés sur les
méthodes de hachage

Idée : Partitionner R et S en (M-1) sous relation avec


une fonction de hachage
Partitions
of R & S Join Result
Hash table for partition
hash Ri (k < B-1 pages)
fn
h2
h2

Input buffer Output


for Si buffer

Disk B main memory buffers Disk

Réda DEHAK 44
Conclusion

Opérateurs M nécessaire I/O

γ, δ B 3B

∩, ∪, -, x, Join MIN ( B( R), B( S )) 3(B(R) + B(S))

⎛ 2M ⎞
Join (M>>k) MIN ( B( R), B( S )) ⎜⎜ 3 −
⎝
⎟(B( R) + B( S ) )
MIN ( B( R), B( S )) ⎟⎠

Réda DEHAK 45
Multi-passes

• Algorithme récursif :
– Si B( R ) ≤ M alors charger R en mémoire et effectuer le tri
– Sinon partitionner R en M relations R1,…,RM :
• Trier récursivement chaque Ri.
• Fusionner le résultat

Condition B( R ) <= Mk
Nbre I/O : (2k-1) B( R )

Réda DEHAK 46
Généralisation

Opérateurs M nécessaire I/O

k
γ, δ B (2k-1)B

∩, ∪, -, x, Join k MIN ( B( R), B( S )) (2k – 1) (B(R) + B(S))

Réda DEHAK 47
Conclusions

Opérateurs M nécessaire I/O

γ, δ B 3B

∩, ∪, -, x, Join MIN ( B( R), B( S )) 3(B(R) + B(S))

Opérateurs M nécessaire I/O

k
γ, δ B (2k-1)B

∩, ∪, -, x, Join k MIN ( B( R), B( S )) (2k – 1) (B(R) + B(S))

Réda DEHAK 48
Plan

• Exécution d’une requête


– Étude des différents algorithmes
• Compilation des requêtes :
– Déterminer un plan logique.
– Déterminer le meilleur plan physique.

Réda DEHAK 49
Construction de l’arbre
correspondant au plan logique
Requête

Parser

Préprocesseur

Génération du plan
logique

Réécriture

Meilleur plan logique


Réda DEHAK 50
Construction
SELECT A
FROM <list_B> A

WHERE C
Group by D E
HAVING E
γD+attr(E)

Réda DEHAK List_B 51


Comparaison des plans

B,D B,D

R.A = “c” ∧
S.E = 2 ∧
R.C=S.C

R.A = “c” S.E = 2


x

R S R S
Réda DEHAK 52
Optimisation de l’algèbre relationnel

• Règles de transformations (préserver l’équivalence) :


– Propriétés mathématiques des opérateurs.
• Quelle sont les bonnes transformations?

Réda DEHAK 53
Jointure

R S = S R
(R S) T =R (S T)

T R
R S S T

Réda DEHAK 54
Produit cartésien et Union

• RxS=SxR
• (R x S) x T = R x (S x T)

• RUS=SUR
• R U (S U T) = (R U S) U T

Réda DEHAK 55
Sélection


σp1 [ σp2 (R)] = σp2 [ σp1 (R)]

σp1∧p2(R) = σp1 [ σp2 (R)]

σp1vp2(R) = [ σp1 (R)] U [ σp2 (R)]

Réda DEHAK 56
Projection

• Soit :
– X un ensemble d’attributs
– Y un ensemble d’attributs

ΠXY(R) ≠ ΠX [ΠY (R) ]


Π X [Π Y (R) ] = Π X (R)

Réda DEHAK 57
Sélection, jointure

• p = prédicat avec que des attributs de R


q = prédicat avec que des attributs de S
m= prédicat avec des attributs de R et S

• σ p (R S) = [σp (R)] S
• σ q (R S) = R [σq (S)]

Réda DEHAK 58
Sélection, jointure

• σ p∧q (R S) = [σp (R)] [σq (S)]


• σ p∧q∧m (R S) = σm [ σp (R) σq (S)]
• σ p∨q (R S) = [σp (R) S]
∪ [R σq (S)]

Réda DEHAK 59
Sélection, projection

• Soit :
– x un sous ensemble d’attributs de R
– z l’ensemble des attributs utilisés pour prédicat P (sous
ensemble des attributs de R)

Π x [σp (R)] = Π x { σp [Π xz (R) ] }

Réda DEHAK 60
Projection, jointure

• Soit :
– x un sous ensemble d’attributs de R
– y un sous ensemble d’attributs de S.
– z l’intersection des attributs de R et de S.

Π xy [R S] = Π xy { [Π xz (R)] [Π yz (S)] }
Π xy [σp (R S)] =
Π xy {σp [Π xz’ (R) Π yz’ (S)] }
z’ = z ∪ attributs de P

Réda DEHAK 61
Sélection, union, différence

Union :
σp (R ∪ S) = σp (R) ∪ σp (S)

Différence :
σp (R - S) = σp (R) – S
= σp (R) - σp (S)

Réda DEHAK 62
Les transformations

1. Faire descendre les sélections :


– σp1∧p2 (R) à σp1 [ σp2 (R) ]
– σp1 [ σp2 (R) ] à σp2 [ σp1 (R) ]
– σp [ R S] à [ σp (R) S]

2. Faire descendre les projections :


– Π x [σp (R)] à Π x { σp [Π xz (R) ] }
– Π x [R S] à Π x { [Π xz (R) ] [Π xz (S) ]}

Réda DEHAK 63
Exemples(1)
• Soit le schéma relationnel suivant :
EMP(eid, did, sal, adresse)
Dept(did, dnom, etage, tel)
Budget(did, budget, dépenses, bénéfices)

Soit la requête suivante :


SELECT D.dnom, B.budget
FROM Emp E, Dept D, Budget B
WHERE E.did = D.did AND D.did = B.did AND
D.etage = 1 AND E.sal >= 59000 AND
E.adresse = ‘PARIS’

Réda DEHAK 64
Exemples(2)

On donne les informations suivantes :


– Employe(nom, grade, d_nom, adresse)
– Le nom de l’employé est une clé candidate
– La relation contient 10000 pages : B(employe)=10000
– M = 10

Réda DEHAK 65
suite
1) Soit la requête suivante :
SELECT grade, nom from personne where grade = ‘ING’
On suppose que 10% des tuples de personne vérifient cette
condition
a) En supposant qu’il existe un indexe B+tree plaçant sur l’attribut grade,
donnez le coût (nombre d’E/S) du meilleur plan?
b) Idem avec un indexe non plaçant?
c) Idem avec un indexe plaçant sur l’attribut nom?
d) Idem avec un indexe non plaçant sur l’attribut nom?

Réda DEHAK 66
suite
2) Soit la requête suivante :
SELECT nom from personne where grade = ‘ING’ and d_nom = ‘Prod’
On suppose que :
• 10% des tuples de personne vérifient la condition (grade = ‘ING’)
• 20% des tuples de personne vérifient la condition (d_nom = ‘Prod’)
• 5% des tuples de personne vérifient la condition du select
a) En supposant qu’il existe un indexe B+tree plaçant sur l’attribut grade
(l’unique indexe), donnez le coût (nombre d’E/S) du meilleur plan?
b) Idem avec un indexe plaçant sur d_nom?
c) Idem avec un indexe plaçant sur les attributs (grade, d_nom)?
d) Idem avec un indexe plaçant sur les attributs (grade, nom)?
e) Idem avec un indexe plaçant sur les attributs (d_nom, grade, nom)?
f) Idem avec un indexe plaçant sur les attributs (nom, grade, d_nom)?

Réda DEHAK 67
Suite
3) Soit la requête suivante :
SELECT grade, count(*) from personne group by grade

a) En supposant qu’il existe un indexe B+tree plaçant sur l’attribut grade,


donnez le coût (nombre d’E/S) du meilleur plan?
b) Idem avec un indexe non plaçant?
c) Idem avec un indexe plaçant sur l’attribut nom?
d) Idem avec un indexe plaçant sur les attributs (nom, grade)?
e) Idem avec un indexe plaçant sur les attributs (grade, nom)?

Réda DEHAK 68
suite
4) Soit la requête suivante :
SELECT grade, count(*) FROM personne WHERE d_name > ‘W’ group by grade
On suppose que 10% des tuples d’employe vérifient la condition du where
a) En supposant qu’il existe un indexe B+tree plaçant sur l’attribut grade, donnez
le coût (nombre d’E/S) du meilleur plan?
b) Idem avec un indexe non plaçant?
c) Idem avec un indexe plaçant sur l’attribut d_nom?
d) Idem avec un indexe plaçant sur les attributs (d_nom, grade)?
e) Idem avec un indexe plaçant sur les attributs (grade, d_nom)?

Réda DEHAK 69
Exemples(3)
• Soit le schéma relationnel suivant :
EMP(eid, did, sal, adresse)
Dept(did, dnom, etage, tel)
Budget(did, budget, dépenses, bénéfices)

Soit la requête suivante :


SELECT D.dnom, B.budget
FROM Emp E, Dept D, Budget B
WHERE E.did = D.did AND D.did = B.did AND
D.etage = 1 AND E.sal >= 59000 AND
E.adresse = ‘PARIS’

Réda DEHAK 70
Questions
1. Donner l’arbre optimisé de cette requête?
2. Quelles sont les possibilités pour l’ordre des jointures possibles
3. Supposant qu’on dispose des informations suivantes :
• indexe b+tree non plaçant sur Emp.did, Emp.sal, Dept.etage, Dept.did,
Budget.did.
• Min(Emp.sal)=10000, Max(Emp.sal)= 60000.
• Card(Employe, Adresse) = 200.
• L’entreprise est sur 2 étages.
• On a 50000 employés et 5000 départements.
a) Pour chaque nœud de l’arbre, donner une estimation du nombre de tuples de la
table?
b) Donner l’ordre optimal des jointures?

Réda DEHAK 71

Vous aimerez peut-être aussi