Académique Documents
Professionnel Documents
Culture Documents
1 Indexes
Cette séance est consacrée aux différentes techniques d’indexation disponibles dans un SGBD. Nous allons
voir comment est construit chaque type d’index à partir d’un ensemble de valeurs. Cela nous permettra de mieux
comprendre l’intérêt de chaque technique et ainsi de mieux pouvoir les utiliser. Pour chacune nous allons étudier
sa création, son coût en terme de taille, son coût en terme d’accès, et sa maintenance.
L’objectif d’un index est de réduire les entrées-sorties pour la lecture d’une table entière lors de l’évaluation
d’une requête.
Par exemple, prenons une table contenant 1000 tuples sur 100 blocs et une requête souhaite prendre 50 des tuples
par restriction. Avec un parcours séquentiel des blocs, il y aura 100 E/S. Alors qu’avec un index donnant à chaque
valeur son pointeur dans le bloc, il y aura dans le pire des cas 50 E/S (un accès par pointeur dans l’index).
Il est à noter que les SGBD identifient un tuple de manière unique, c’est son ROWID.
N˚ Departement Region
3 Allier Auvergne
36 Indre Centre
18 Cher Centre
75 Paris Ile-de-France
39 Jura Franche Comté
9 Ariège Midi Pyrénées
81 Tarn Midi Pyrénées
11 Aude Languedoc Roussillon
12 Aveyron Midi Pyrénées
25 Doubs Franche Comté
73 Savoie Rhone Alpes
55 Meuse Lorraine
15 Cantal Auvergne
51 Marne Champagne - Ardenne
42 Loire Rhone Alpes
40 Landes Aquitaine
14 Calvados Basse Normandie
30 Gard Languedoc Roussillon
84 Vaucluse Provence Alpes Cote d’Azur
7 Ardèche Rhone Alpes
Vertigo/CNAM, Paris 1 1
Index dense et Index non dense
Un index dense est un fichier contenant des pairs clés/pointeurs. Les pointeurs référencent chacun un tuple
(ROWID - adresse de page + position dans le page). Chaque clé est associée à un ou plusieurs pointeurs dans les
fichiers.
Un index non dense (ou cluster) est un fichier contenant des pairs clés/pointeurs. Les pointeurs références
chacun un page ou plusieurs pages de données. Chaque clé est associé à un page contenant des valeurs ordonnées
Pour concevoir un page de données, il faut tenir compte de la taille des tuples, donc des données.
Nous supposerons que les n˚ de département sont codés sur 2 octets, les départements sur 30 octets (codage
UTF-8 = 1 octet par caractère), et la région de même. Pour les pointeurs, nous considérerons une taille de 18
octets.
Nous supposerons que notre SGBD constitue des pages (pages) de 512 octets.
1. Quel est la taille en nombre de pages de la table Départements ? (On mettra toutes les tuples en vrac, on
ne considérera pas le schéma et la fin d’un page pointe sur le suivant).
Correction adresse de la 2˚ page sur le disque @ adresse du 3˚ tuple dans la page. Pour plus de simpli-
cité, dans cet ED nous utiliserons la notation 2@3 pour la table départements (mais on ne pourra l’utiliser
de manière générale).
3. Retirez le département 55. Comment pourrait-on garder l’information du tuple vide ?
Vertigo/CNAM, Paris 2 2
Index dense et Index non dense 2.2 Création d’un index dense
Correction Il faut dans le premier page garder un pointeur vers le premier emplacement vide. Les empla-
cements se chaînent les uns aux autres. Lors d’une insertion, il suffira de remplir le premier emplacement
vide et de mettre à jour le pointeur dans le premier page.
Dans ce cas, il faut un pointeur supplémentaire, et la place restante est suffisante. Nous pouvons rester à 3
pages.
4. Retirez alors le département 84.
5. Ajoutez le tuple 92 / Hauts de Seine / Ile de France à l’emplacement vide.
Correction
Aquitaine 3@2
Auvergne 1@1
Auvergne 2@6
Basse Normandie 3@3
Centre 1@2
Centre 1@3
Champagne - Ardenne 2@7
Franche Comté 1@5
Franche Comté 2@3
Ile-de-France 1@4
Languedoc Roussillon 2@1
Languedoc Roussillon 3@4
Lorraine 2@5
Midi Pyrénées 1@6
Midi Pyrénées 1@7
Midi Pyrénées 2@2
Provence Alpes Cote d’Azur 3@5
Rhone Alpes 2@4
Rhone Alpes 3@1
Rhone Alpes 3@6
3. Combien faut-il d’accès disques pour récupérer les départements du Languedoc-Roussillon ? (Nous sup-
poserons que l’index est en mémoire)
Correction
Vertigo/CNAM, Paris 3 3
B+Tree
N˚ Departement Region
40 Landes Aquitaine 1˚ page
3 Allier Auvergne
15 Cantal Auvergne
14 Calvados Basse Normandie
36 Indre Centre
18 Cher Centre
51 Marne Champagne - Ardenne
39 Jura Franche Comté 2˚ page
25 Doubs Franche Comté
75 Paris Ile-de-France
11 Aude Languedoc Roussillon
30 Gard Languedoc Roussillon
55 Meuse Lorraine
9 Ariège Midi Pyrénées
81 Tarn Midi Pyrénées 3˚ page
12 Aveyron Midi Pyrénées
84 Vaucluse Provence Alpes Cote d’Azur
73 Savoie Rhone Alpes
42 Loire Rhone Alpes
7 Ardèche Rhone Alpes
2. Créez un index non dense sur ces pages.
Correction
Aquitaine 1
Franche-Comté 2
Midi-Pyrénées 3
3. Quel est la taille de l’index ?
3 B+Tree
Un arbre B+ est un arbre où les noeuds correspondent des valeurs uniques. Une recherche de valeur (x)
constiste à partir de la racine de l’arbre en comparant avec le noeud courant (y) de l’arbre.
Dans le cas d’un arbre binaire de recherche :
Pour construire un arbre B+ d’ordre k, il faut ajouter les valeurs les unes après les autres, en suivant l’algo-
rithme suivant :
Vertigo/CNAM, Paris 4 4
B+Tree 3.1 Création de l’arbre B+
Créer un arbre B d’ordre 2, à partir des valeurs numériques des départements, les feuilles contiendront les
valeurs des départements.
Correction Voici l’arbre généré après les nombreuses insertions et séparations des noeuds de l’arbre. Ce BTree
contient dans ses feuilles toutes les valeurs possibles.
36
11 18 51 73
3 7 9 11 12 14 15 18 25 30 36 39 40 42 51 55 73 75 81 84
Rechercher le département numéro 25 dans l’arbre. Combien d’étapes faut-il en moyenne pour atteindre une
valeur ?
Correction Il faut 3 parcours de noeuds pour atteindre le numéro 25 (et 4 comparaisons de valeurs).
Chaque noeud à maximum 3 enfants, et minimum 3/2 enfants (due à la séparation). Il faut donc log3 (n) coups
pour atteindre une feuille (avec n le nombre de noeuds).
Rechercher les départements 25 à 40 dans l’arbre. Pourrait-on envisager une amélioration de l’index ?
Vertigo/CNAM, Paris 5 5
B+Tree 3.3 Taille de l’arbre B+
Correction Afin d’éviter une recherche successive de chacune de ses valeurs, il suffit de chainer les feuilles de
l’arbre. Ainsi, il suffit de rechercher la première valeur dans l’arbre, puis de parcourir séquentiellement chacune
des valeurs des feuilles jusqu’à obtenir la dernière valeur (ou supérieure à celle-ci).
Correction 20 valeurs dans les feuilles. 5 valeurs dans l’arbre. Un pointeur pour chaque valeur (25), plus les
pointeurs "plus que" dans les noeuds intermédiaires (3), plus les pointeurs de chainage des feuilles (5).
Ce qui nous fait 25*2 + 33*18 = 644o : 2 pages.
Information supplémentaire : Idéalement, on ne peut couper un noeud de l’arbre. Il faut donc le comptabiliser le
noeud dans son intégralité, soit : 4 valeurs et 5 pointeurs (même pour les feuilles).
Un noeud a une taille de 98o.
494 / 98 = 5,04 => 5 noeuds par page.
Il y a 9 noeuds dans l’arbre, ce qui nous fait donc 2 pages au total (limite).
Créer l’arbre B+ avec les mêmes valeurs mais après les avoir ordonnées. Que constater-vous ?
Vertigo/CNAM, Paris 6 6