Vous êtes sur la page 1sur 6

Indexes

EDs NFE 106


CNAM Paris

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.

Liste de types d’indexes existants (non exclusive) :


– B+Tree
– Tables de hashage
– Bitmap
– Index inversé.
Pour la suite des exercices, nous allons utiliser la table Departements contenant les 20 tuples suivants :

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

2 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

2.1 Création des pages

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 Un tuple donne 62 octets (2 + 30 + 30).


Un pointeur fait 18 octets.
Un page fait 512 octets. Page utile : 512 - 18 -> 494o
Nb tuples par page : 494 / 62 = 7.9 => 7. (on ne coupe pas de tuples en 2)
Il y a 20 tuples, donc il faudra 3 pages (20/7 = 2.85, arrondit au supérieur cela fait 3).

1˚ page + pointeur sur le 2˚


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
2˚ page + pointeur sur le 3˚
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
3˚ page
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

2. Comment peut-on identifier le ROWID du Doubs ? (de manière générale)

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.

2.2 Création d’un index dense


1. Créez un index dense, sur les pages de l’exercice précédent, sur la colonne Région. (On représentera
ici les ROWID par des flèches vers les données et non leur valeur réelle).

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

2. Quel est la taille de l’index ?

Correction 12 clés différentes reparties sur 20 pointeurs.


30 + 18 = 48o par entrée de l’index.
494 / 48 = 10,29 tuples par page.
20 / 10,29 = 1,94 => 2 pages pour l’index.

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 Il faut 2 E/S car il faut atteindre le 2˚ page et le 3˚.

2.3 Création d’un index non dense


1. Créez les pages ordonnés sur la colonne Région. (La table est celle avant suppressions et insertions).

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 ?

Correction 3 pages donc 3 pointeurs avec valeur.


494 / 48 => 10 tuples par page.
3 / 10 = 0.3 => 1 page pour l’index.
4. 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 Il faut 1 E/S car il faut atteindre le 2˚ page.


5. Retirez le tuple 55. Quel est l’impact sur les pages ? Et l’index ?
6. Ajoutez le tuple 92 / Hauts de Seine / Ile de France. Quel est l’impact sur les pages ? Et
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 :

– Si x < y : fils gauche


– Si x > y : fils droite
Pour les arbres B d’ordre k, peut contenir au maximum 2*k valeurs et de fait plusieurs noeuds fils. Pour une
recherche de valeur x dans un noeud ayant 2 valeurs :
– Si x < y1 : 1˚ fils
– Si y1 < x < y2 : 2˚ fils
– Si y2 < x : 3˚ fils
Les feuilles contiennent les valeurs recherchées.

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+

1. En cherchant dans l’arbre, trouver la feuille où l’élément pourrait être ajouté.


2. Si le noeud contient moins de valeurs que le nombre maximum autorisé par noeud (2*k), alors ajouter
l’élément de manière ordonnée.
3. Sinon, la feuille est alors éclatée :
(a) L’élément médiant est choisi (nouveau père du sous arbre) parmi les éléments présents et le nouveau
(il y a k+1 éléments, donc il faut prendre le (k+1)/2 ˚ élément).
(b) Les valeurs inférieures ou égal au médiant deviennent fils gauche, et les valeurs supérieures fils droit.
(c) L’élément médiant (père du sous-arbre) est ajouté au noeud parent (celui qui pointait sur le noeud
courant). Un nouvel éclatement peut alors en résulter (dans ce cas, seul les valeurs inférieures de-
viennent fils gauche, et non inférieures ou égales).

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

F IGURE 1 – Arbre B d’ordre 3, généré

3.2 Recherche dans l’arbre B+

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).

3.3 Taille de l’arbre B+

Donner la taille de cet index amélioré.

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).

3.4 Pour aller plus loin

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

Vous aimerez peut-être aussi