Professional Documents
Culture Documents
Eric Boniface
Introduction
Fournir l'algorithme d'accs la B.D. pour rpondre une requte exprime en langage assertionnel Les tapes
Analyse de la requte correction et simplification Ordonnancement en squence d'oprations lmentaires plan d'excution Excution
Analyse de requtes
Sur un exemple
COURS (code, nomcours, nomprof) NOTE (code, matricule, note) ETUDIANT (matricule, nom, adresse)
Question
Quels sont les noms des cours suivis par l'tudiant DUPONT donns par le professeur DURAND ? En SQL :
Select nomcours From cours Where nomprof = 'DURAND and code in (select code from note where matricule in (select matricule from etudiant where nom = 'DUPONT'));
3
Analyse de requtes
Graphe de connexion des relations
Condition ncessaire pour que la question soit correcte : connexit du graphe des relations et qualifications cohrentes 2 requtes sont quivalentes si graphes d'attributs transitivement identiques On peut complter les graphes en y reprsentant les contraintes d'intgrit gnration d'autres requtes quivalentes
Ordonnancement et problmes
L'analyse de la requte l'ensemble des oprations de l'algbre relationnelle excuter
Une opration peut tre excute ds que ses oprandes sont disponibles Si l'opration A n'utilise pas le rsultat de l'opration B et vice-versa, A et B peuvent tre excutes en parallle
Dcision doptimisation
Quand une requte s excute plus lentement que des requtes similaires Quand le temps d excution est jug anormal par rapport la taille des tables et par rapport aux index existants Quand un plan nutilise pas un index quil devrait Quand le temps d excution dune requte dans une procdure stocke > celui de la requte directe Dans les SGBD du march, deux mthodes
Mthode dite syntaxique, principalement restructurations algbriques Mthode destimation de cots
6
Restructurations algbriques
Etapes
1. 2. 3. 4. 5.
Ecrire la suite des oprations Dcouper les restrictions comportant plusieurs prdicats Remonter les restrictions le plus haut possible Regrouper les restrictions successives dune mme relation Refaire 2 et 3 pour les projections
Restructurations algbriques
Arbre algbrique restructur
Estimation de cots
valuer le cot d excution de la requte en utilisant des statistiques sur Nb exact ou estim de tuples et de blocs par table Nb de niveaux dindex et nb de valeurs distinctes par attribut
Slectivit d un attribut = nb de val. diffrentes / nb tuples (1 pour les cls)
Optimiseur Oracle
Analyse de la requte
Vrification de la syntaxe Recherche des tables et des colonnes dans le dictionnaire de donnes
Excution
Recherche dans les index Si ncessaire, transfert de blocs en mmoire centrale Calcul de la rponse Affichage de la rponse
10
Optimiseur Oracle
Deux stratgies d optimisation
A base de rgles (syntaxique) A base de cots
Choix pour une requte, pour session ou une instance Ajout de directives doptimisation dans une requte Dans ORACLE, les index sont utiliss selon la forme des clauses WHERE selon l'ordre suivant
ROWID = cste Colonne d'index Unique = cste Index concatn unique = cste Index concatn non unique = cste Colonne d'index non unique = cste Index concatn = cste
11
Optimiseur Oracle
Dans ORACLE, les index sont utiliss selon la forme des clauses WHERE selon l'ordre suivant (suite)
Partie gauche d'un index concatn = cste Colonne d'index unique BETWEEN cste Colonne d'index non unique BETWEEN cste AND cste ou LIKE 'cste%' Colonne d'index unique > cste Colonne d'index non unique > cste ou < cste SORT/MERGE (jointures seulement) MAX (colonne indexe) ou MIN ORDER BY index AND cste ou LIKE"cste%" Parcours complet de la table
12
Optimiseur Oracle
Exemple de plan : select p.libelle, s.qte from produit p, stock s where p.prodnum=s.prodnum;
Explain plan set statement_id= XXX for select p.libelle . Puis select id, parent_id, operation, object_base,options from plan_table;
13
Exemple doprations
Exemple
Cinma(id-cinma*, nom, adresse) salle(id-salle*, nom, capacit^,id-cinma**) film(id-film*,titre, anne, idralisateur**) sance(id-sance*,heuredbut,heurefin,idsalle**,idfilm) artiste(id-artiste*,nom,datenaissance) * index unique ** index non unique ^ avec ou sans
14
Exemples
Slection sans index
SELECT * FROM cinema WHERE nom='Le Rex'; Plan d excution
0 SELECT STATEMENT 1 TABLE ACCESS FULL CINEMA
Exemples
Slection conjonctive avec index
SELECT capacit FROM salle WHERE IDcinma=187 AND nom='Salle 1'; Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY INDEX ROWID SALLE 2 INDEX RANGE SCAN IDX-SALLECINEMA-ID
16
Exemples
Slection conjonctive avec 2 index
SELECT nom FROM salle WHERE IDcinema=1098 AND capacit=150 Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY ROWID SALLE 2 AND-EQUAL 3 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID 4 INDEX RANGE SCAN IDX-CAPACITE
17
Exemples
Slection conjonctive avec 2 index
SELECT nom FROM salle WHERE IDcinema=1098 AND capacit=150 Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS BY ROWID SALLE 2 AND-EQUAL 3 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID 4 INDEX RANGE SCAN IDX-CAPACITE
18
Exemples
Slection disjonctive avec des index
SELECT nom FROM salle WHERE IDcinema=1098 OR capacit>150 Plan d'excution
0 SELECT STATEMENT 1 CONCATENATION 2 TABLE ACCESS BY ROWID SALLE 3 INDEX RANGE SCAN IDX-CAPACITE 4 TABLE ACCESS BY ROWID SALLE 5 INDEX RANGE SCAN IDX-SALLE-CINEMA-ID
19
Exemples
Slection avec et sans index
SELECT nom FROM salle WHERE IDcinema=1098 OR nom='salle 1' Plan d'excution
0 SELECT STATEMENT 1 TABLE ACCESS FULL SALLE
20
Exemples
Jointure avec 1 index
SELECT film.*FROM film, sance WHERE Film.idfilm=sance.idfilm Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL sance 3 TABLE ACCESS BY ROWID FILM 4 INDEX UNIQUE SCAN IDFILM_IDX
21
Exemples
Jointures avec 2 index
SELECT cinema.nom, capacite FROM cinema, salle WHERE cinema.IDcinema=salle.ID-cinema; Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL SALLE 3 TABLE ACCESS BY ROWID CINEMA 4 INDEX UNIQUE SCAN IDX-CINEMA-ID
22
Exemples
Jointure avec 2 index et slection avec 1 index
SELECT cinema.nom, capacite FROM cinema, salle WHERE cinema.ID-cinema=salle.ID-cinema AND capacite>150; Plan d'excution
0 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS BY INDEX ROWID SALLE 3 INDEX RANGE SCAN IDX-CAPACITE 4 TABLE ACCESS BY INDEX ROWID CINEMA 5 INDEX UNIQUE SCAN IDX-CINEMA-ID
Avec cinema.ID-cinema : index unique et salle.ID-cinema : index non unique et capacite : index non unique
23
Jointures
Jointures par boucles imbriques
Parcourir les tuples dune table (relation externe) Pour chaque tuple slectionn, trouver les tuples dans lautre table (relation interne) qui joignent Dans la relation externe, les tuples accds une seule fois Dans la relation interne, sans index, les tuples sont accds de nombreuses fois Importance du choix de lordre des jointures
4 algorithmes
Boucles imbriques si tables de grande taille Tri-fusion Hachage Par groupement en cas de cluster
24
Directives doptimisation
Choose : stratgie base de cots avec optimisation globale si des stats existent, sinon base de rgles Rule : stratgie base de rgles (dfaut) all_rows : base de cots avec optimisation globale first_rows : base de rgles avec minimisation du temps de rponse
25