Professional Documents
Culture Documents
plan d’exécution
INDEX :
B-arbre, Bitmap
Création d’index sous oracle
1
Définition
2
Exemple : Index d’un livre
3
Index En action
3 Garcia Luis …
• Un moyen pour récupérer la ou les lignes 4 Fadle Mac …
répondant à la clause nom=’dupont’ est de
5 Milka Domi …
balayer toute la table (le fichier).
• Le temps de réponse sera prohibitif dès que la 6 dupont Marco …
table dépasse quelques centaines de lignes. 7 Zara Thé …
• Afin d’optimiser ce type de requête, on pourra
…
indexer l’attribut ”nom”. … …
Index (un attribut)
T
Adr,
Nom Pre
Nom Ptr …
1 Martin Léo …
Index Deloin 2
2 Deloin Léa …
sur T.Nom
Dupont 6
Index : liste 3 Garci Luis …
Fadle 4
des noms
4 Miche
triée + un Garci 3 Fadle …
l
pointeur vers
le tuple Martin 1 5 Milka Domi …
… …
… …
On peut effectuer une
recherche dichotomique
Plusieurs index sur une même table
T
Nom Pre C
1 Martin Léo …
Index
Sur 2 Deloin Léa …
T.Nom
3 Garci Luis …
Index
4 Mich
Sur T.Pre Fadle
el
…
5 Milka Domi …
6 Marc
Dupont …
o
7 Zara Thé …
… … …
Possibilité de créer plusieurs index sur une
même table.
Index composé
T
Nom Pre Adr
1
Index Martin Léo …
3 Garci Luis …
Index
Index on
4 Fadle Michel …
T.Prénom
Sur T. 5 Milka Domi …
(Nom,Pre)
6 Dupon
Marco …
t
7 Zara Thé …
…
… …
• Exemple
CREATE INDEX IdxNomEtud On Etudiant (Nom)
• Suppression
DROP INDEX nom_index ;
8
Index par défaut
9
Choix des index
10
Type d’index
• Organisation de l’index
– Séquentiel (index dense)
– Séquentiel indexé (index creux)
– Arbres B+ (par défaut dans ORACLE)
– Bitmap
– Hashage
11
Type d’index: Index séquentiel (dense)
40 1 0 90 Pommier 25.99 2
60 3 50 Chêne 22.99 4
70 7
81 Catalpa 25.99 5
80 9
95 Génévrier 15.99 6
81 5
70 Herbe à puce 10.99 7
90 2 1
20 Sapin 12.99 8
95 6
80 Poirier 26.99 9
12
Type d’index: Index creux/épars (séquentiel indexé)
Numéro
Numéro d'enregistrement
Index de bloc relatif
10 0 10 Cèdre en boule 10.99 0
70 1 20 Sapin 12.99 1
80 Poirier 26.99 6
• Non dense (creux) 81 Catalpa 25.99 7
1
• Index plus petit 90 Pommier 25.00 8
95 Génévrier 15.99 9
• Accès séquentiel rapide (accès direct à
un bloc puis séquentiel dans le bloc
• Primaire
13
Type index : Index par Arbre-B
• Rappel arbre binaire (idem à indexation séquentielle sur des
clés triées (recherche dichotomique)
14
10 16
8 12 15 18
Parcours de l’arbre A: 7 9 11 13
1 2 3 4 5 6 7 8 9 10 11
14 10 16 8 12 15 18 7 9 11
13
Cet index est équivalent à une recherche dans une table triée
14
Type index : Index par Arbre-B+
• Au lieu d’une clé par nœud, chaque nœud est un bloc contenant k clés triées
et k+1 fils
• Les B-arbres sont équilibrés (toutes les feuilles à la même profondeur).
• Les feuilles contiennent les valeurs des clés et le Rowid
• Arbre B+ Les clés sont répétées au niveau des feuilles (mais pas dans un
arbre B)
Bloc 7
50
Bloc 2 Bloc 6
25 40 45 60
Bloc 2 Bloc 6
25 40 45 60
Lire Bloc 8
Comparer séquentiellement 48 aux autres clés du Bloc
Type d’index: Index bitmap
Titre Genre
1 Vertigo Suspense
2 Brazil Science-fiction
Un index bitmap considère toutes les
3 Twin Peaks Fantastique valeurs possibles pour un attribut.
4 Underground Drame Pour chaque valeur, on stocke un
5 Easy Rider Drame tableau de bits (dit bitmap) avec
6 Psychose Drame
7 Greystoke Aventures autant de bits qu'il y a de lignes dans
8 Shining Fantastique la table.
9 Annie Hall Comédie
10 Jurassic Park Science-fiction
11 Metropolis Science-fiction Très utile pour les colonnes qui ne
12 Manhattan Comédie possèdent que quelques valeurs
13 Reservoir Dogs Policier distinctes.
14 Impitoyable Western
15 Casablanca Drame
16 Smoke Comédie
Science-fiction
de type “drame” Titre Genre
1 Vertigo Suspense
Comédie
RowId
Drame
1- Sélectionner dans 2 Brazil Science-fiction
la table les numéros 3 Twin Peaks Fantastique
1 0 0 0 4 Underground Drame
de ligne (RowId) 2 0 1 0 5 Easy Rider Drame
ayant Drame=“1” 3 0 0 0 6 Psychose Drame
4 1 0 0 7 Greystoke Aventures
5 1 0 0 8 Shining Fantastique
6 1 0 0
9 Annie Hall Comédie
7 0 0 0
10 Jurassic Park Science-fiction
8 0 0 0
11 Metropolis Science-fiction
9 0 0 1
10 0 1 0
12 Manhattan Comédie
11 0 1 0
13 Reservoir Dogs Policier
12 0 0 1 14 Impitoyable Western
13 0 0 0 15 Casablanca Drame
14 0 0 0 16 Smoke Comédie
15 1 0 0
16 0 0 1
18
Type d’index: Hashage
Hashage : utilise une fonction(h) qui appliquée à la clé h(clé)
donne l’adresse ou se trouve le tuples (l’enregistrement)
20
Table organisée en index
21
Ordre Oracle
CREATE TABLE (
id NUMBER NOT NULL PRIMARY KEY,
[...]
) ORGANIZATION INDEX;
22
Conclusion
23
Optimisation des Requêtes
Plan d’exécution
EXPLAIN PLAN
24
Outils d’optimisation d’oracle
• Outils
– EXPLAIN: visualisation des plans d'exécution
– ANALYSE: production de statistiques
– TKPROF: mesure du temps d'exécution
25
Plan d’exécution
• Oracle conserve la trace du chemin d’accès d’une requête dans
une table appelée « plan_table »
• Tous les graphes des requêtes du LID et LMD (SELECT, UPDATE ,
INSERT et DELETE) sont conservées
• Exemple
26
Plan d’exécution
27
Type d’opération
28
Type d’opération : chemin d’accès
29
Type d’opération : Opérateurs physiques
• Pour la jointure
– Boucles imbriquées: NESTED LOOPS
– Tri-fusion: SORT JOIN, MERGE JOIN
– Hachage: HASH JOIN
• Autres opérations
– Union d'ensembles d'articles: CONCATENATION, UNION
– Intersection d'ensembles d'articles: INTERSECTION
– Différence d'ensembles d'articles: MINUS
– Filtrage d'articles d'une table basé sur une autre table: FILTER
– Intersection d'ensembles de ROWID: AND-EQUAL
– …
• Tous les données d’explain Plan sont stockées dans la table PLAN_TABLE
30
31
Structure de PLAN_TABLE
33
Mise en oeuvre
EXPLAIN PLAN
SET statement_id = 'p1' FOR
select noemp, nomemp
from EMPLOYE
where noemp > 3;
34
Mise en œuvre
EXPLAIN PLAN
SET statement_id = 'p1' FOR
select nomemp,nomdept, salaire
from employe, departement
where employe.nodept = departement.nodept
and salaire >5000
6 lignes sélectionnées
35
Mise en œuvre