|
Chapitre 3 : Les
index |
|
|
1 - Introduction |
|
|
|
|
|
Les
bases de données prennent souvent des proportions importantes, voire
considérables. Si une recherche d'information dans une table s'effectue de
manière simplement séquentielle (c'est à dire en examinant toute la table, ou
du moins tous les champs concernés, du début jusqu'à la fin), le temps
d'attente peut devenir prohibitif pour l'opérateur. L'index
est l'outil qui permet de résoudre ce problème. |
|
|
|
|
|
|
|
|
|
Imaginons
une bibliothèque dans laquelle les livres sont rangés n'importe comment -- au
fur et à mesure de leur acquisition, par exemple. Pour rechercher un livre
dont on connaît le titre, il faut parcourir rayons dans l'ordre (recherche séquentielle).
Ou l'on finit par trouver (ouf !), ou l'on arrive bredouille au dernier
rayonnage et on en conclut que la bibliothèque ne possède pas l'ouvrage. |
|
|
|
|
Bien
entendu, personne ne sera jamais assez sot pour organiser une bibliothèque de
pareille façon. Les livres seront rangés par ordre alphabétique du titre, par
exemple. Si le titre que nous recherchons commence par un L, nous irons
vers le rayon du milieu et nous examinerons un ouvrage. Si son titre commence
par un P, nous conclurons que nous sommes allés trop loin. Nous
reculerons quelque peu, et nous réitérerons notre démarche
. Nous arriverons beaucoup plus vite que précédemment à trouver le
livre que nous recherchons, ou à conclure qu'il n'est pas dans la
bibliothèque, parce que nous pratiquons une méthode dichotomique
(quelque peu optimisée), qui nous permet d'arriver au résultat en n'examinant
qu'une petite fraction des livres contenus dans la bibliothèque. Nous pouvons
pratiquer une technique efficace de recherche parce que les livres
constituent un ensemble ordonné. Dans un ensemble désordonné, on ne
peut pratiquer qu'une recherche séquentielle, beaucoup plus lente. |
|
|
|
|
Mais... comment ferons-nous si nous
recherchons un livre dont nous connaissons l'auteur, mais pas le titre ? Les
livres de la bibliothèque ne peuvent pas être triés à la fois par ordre
alphabétique de leur titre, et celui de leur auteur. C'est ici
qu'intervient la notion d'index. Pour chaque livre, nous créons une fiche sur
laquelle nous inscrivons le nom de l'auteur et le titre du livre. Puis nous
rangeons ces fiches par ordre alphabétique des noms d'auteur. Pour rechercher
le livre d'un auteur donné, nous compulsons les fiches. Comme elles
constituent un ensemble ordonné, l'opération est rapide ; ou nous obtenons
le titre du livre, ou nous concluons que le livre ne se trouve pas dans la
bibliothèque. Dans le premier cas, nous nous rendons dans les rayons munis du
titre, et comme les livres sont classés par ordre alphabétique de leur titre,
notre trouvons rapidement l'ouvrage en question. |
|
|
|
|
Imaginons
maintenant que la bibliothèque soit gérée par ordinateur. Si la table qui
contient les livres est triée par ordre alphabétique des titres, il faut que nous
construisions un index informatique sur le champ auteur pour que la recherche
d'un livre dont on connaît l'auteur s'effectue rapidement. Car l'ordinateur
est programmé à l'image de ce que font les humains : dans un ensemble
non trié il recherche séquentiellement, alors que dans un ensemble trié il
recherche par dichotomie. Dans le second cas, il va beaucoup plus vite. |
|
|
|
|
|
|
|
|
|||
|
|
2 - Le fonctionnement de l'index |
|
||||||||||||||||||||||||||||||||||||
|
|
|
Nous
disposons maintenant d'un ordinateur pour gérer la bibliothèque. Au fur et à
mesure que nous achetons des livres, nous les numérotons dans l'ordre. Puis nous
saisissons dans la table d'une BDD les données qui les caractérisent (numéro,
titre, auteur, éditeur, année d'édition, ISBN, etc.), et nous les rangeons
sur les rayons dans l'ordre de leur numéro. La table se présente ainsi : |
|
|||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
|
En
informatique, un index est représenté par une table à une seule colonne,
comme on le voit sur la figure ci-dessous. Dans le premier index (index sur le
titre), le premier titre par ordre alphabétique correspond au livre n° 2
(Access), suivi du livre n° 3 (Les écoles) et du livre n° 1 (Mon
jardin). Les autres index s'interprètent de la même façon. |
|
|||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
|
L'index présente des avantages : |
|
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||
|
|
|
L'index ne possède pas que des
avantages. Voici pour ses inconvénients : |
|
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||
|
|
|
L'informatique
permet de créer des index sur plusieurs champs. Imaginons que nous
ayons séparé le nom et le prénom de l'auteur, par exemple. Un index sur les
deux champs nom et prénom correspond en fait à l'index créé sur un champ unique
dans lequel nous aurions concaténé le nom et le prénom. |
|
|||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
|
|
3 - Les doublons |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
On
appelle "doublon" une information qui apparaît au moins deux fois dans
une table. La notion de doublons s'applique à une colonne donnée, ou à
plusieurs colonnes, ou à la totalité des colonnes d'une même table (figure
ci-dessous). Dans ce dernier cas, nous avons affaire à deux enregistrements
(ou plus) identiques, une situation qu'il faut toujours considérer comme
anormale. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Dans
une BDD, les enregistrements dupliqués peuvent provenir de deux
sources : |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Lorsque
nous introduisons de l'information dans une table pourvue d'un index, le SGBD
met ce dernier à jour en temps réel. Au cours de cette opération, il peut détecter
facilement si cette nouvelle information constitue un doublon sur les champs
concernés. Il est donc aisé de doter le SGBD d'une fonction permettant, si on
le désire, d'empêcher la validation de la saisie d'un enregistrement
constituant un doublon. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Nous
reviendrons, dans les chapitres relatifs aux requêtes, sur le problème de la
création de doublons indésirables lors de la manipulation des informations
d'une BDD. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
4 - L'indexation d'un champ |
|
|||||||||||||
|
|
|
Dans
le chapitre consacré aux tables, nous avons rencontré la "Propriété du
champ" intitulée "Indexé", pour tous les types de données sauf
"Objet OLE". Quand nous cliquons dans la zone de texte
correspondante, une liste déroulante nous est proposée, qui contient les
trois choix suivants : |
|
||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
Pour
créer un index sur le champ correspondant, il suffit de répondre
"Oui", avec ou sans doublon selon le cas. Si nous conservons la
valeur "Non" par défaut, aucun index ne sera créé. |
|
||||||||||||
|
|
|
Il
est inutile de ralentir le fonctionnement du système lors de la saisie des
données, si cela ne nous fait pas gagner du temps ultérieurement. Il est donc
préférable de répondre "Non" dans les cas suivants : |
|
||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
Dans
les cas contraires, la création d'un index présente de l'intérêt. Se pose
alors le problème de savoir si nous admettons ou non les doublons : |
|
||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
Rappelons
pour mémoire qu'un champ doté d'une clé est toujours indexé sans doublons. Or
une table ne peut contenir qu'une seule clé, alors qu'elle peut être dotée de
plusieurs index. Il faut donc réserver la clé pour la réalisation des
relations, et ne pas l'utiliser comme index. |
|
||||||||||||
|
|
|||||||||||||||
|
|
5 - La création d'un index multi-champ |
|
|||||||||||||
|
|
|
Dans
une table contenant des données relatives à plusieurs milliers de personnes,
le risque d'homonymie devient important. A fortiori dans une plus grande
table, celle représentant l'annuaire téléphonique d'une grande ville par
exemple. Pour accepter l'homonymie tout en rejetant les doublons dus à des
erreurs de saisie, on utilise un index basé sur plusieurs champs. Si
la probabilité de trouver deux fois "Dupont" est importante, celle
de trouver deux fois "Dupont Jean" est déjà nettement plus faible,
et celle de trouver deux fois "Dupont Jean né le 12/06/1978" est
pratiquement nulle. En créant un index sur deux champs (Nom + Prénom) ou sur
trois champs (Nom + Prénom + Date de naissance), on peut rejeter les doublons dus à des erreurs
de saisie tout en tolérant parfaitement l'homonymie. On notera que le
SGBD Access permet de grouper dix champs au maximum dans un index multi-champ, mais qu'on ne dépasse pratiquement jamais la
valeur trois. |
|
||||||||||||
|
|
|
Pour
créer un index multi champ, il faut se trouver en mode création de la table,
et cliquer sur l'icône |
|
||||||||||||
|
|
|
|
|
||||||||||||
|
|
|
La
figure ci-dessous représente l'état de la boite de dialogue en fin de saisie,
dans le cas simple où seulement deux champs ("Nom" et
"Prénom") sont concernés. |
|
||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|
Plusieurs
index multi-champ peuvent coexister dans une même
table. Ils peuvent également cohabiter avec une clé. Tout ce petit monde se
retrouve listé dans la fenêtre de définition des index. L'index relatif à une
clé se repère à l'icône correspondante dans la colonne (grisée) la plus à
gauche, à son nom "PrimaryKey", et par le
fait que la propriété "Primaire" affiche "Oui", comme le
montre la figure ci-dessous. |
|
||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|
On
notera pour terminer que, si un champ fait partie d'un index multi-champ, sa propriété "Indexé" vaut
"Non". C'est normal, il ne faut rien y changer. |
|
||||||||||||
|
|
|||||||||||||||
|
|
6 - Conclusion |
|
|
|
|
|
Les
index jouent un rôle discret mais important dans la gestion des BDD. |
|
|
|
|
La
décision de créer un index résulte de l'examen des avantages et inconvénients
de cette opération. L'index ralentit les saisies et consomme un peu de place,
mais il rend les tris et les recherches d'information plus rapides. Bien
entendu, il est inutile de créer un index sur quelque champ que ce soit dans
une table qui renferme très peu d'enregistrements. |
|
|
|
|
L'index
joue un rôle important dans l'élimination des doublons résultant d'erreurs de
saisie. |
|
|
|
|||