Index B-Tree et Bitmap

RappelIndex

Un index de base de données est une structure de données complémentaire aux tables, qui permet d'optimiser les recherches dans une ou plusieurs colonnes.

  • Les index sont donc appropriés pour optimiser les accès SQL comprenant une opération de restriction (clause WHERE).

  • Une jointure étant la composition d'un produit cartésien et d'une restriction, elle est également optimisable grâce à l'indexation (donc les clés étrangères sont de bons candidats à l'indexation).

RappelIndex B-Tree

Un index de type B-Tree est fondé sur la notion d'arbre équilibré, qui permet dans le cas général d'assurer un temps de recherche constant quelle que soit la valeur recherchée.

Un tel index est utile pour optimiser l'accès à une colonne comportant de nombreuses valeurs distinctes et en particulier lorsque chaque valeur concerne un petit nombre d'enregistrements : donc lorsque le rapport D entre le nombre de valeurs distinctes et le nombre d'enregistrements tend vers 1.

\[D = \frac{nombre\,de\,valeurs}{nombre\,d'enregistrements} \quad {\longrightarrow} \quad 1\]

AttentionIndex B-Tree et discrimination

Si le rapport D est trop petit, alors l'index est peu utile car chaque recherche dans l'index renverra un grand nombre d'enregistrements.

Par exemple si la question est "quelles sont les noms des femmes vivant en France" (SELECT nom FROM personne WHERE genre='Femme' AND pays='France'), un index sur le genre aura très peu d'intérêt par rapport à une recherche directe dans la table et au contraire pourra conduire à occuper un volume important dans la BD.

DéfinitionIndex Bitmap

Les index Bitmap sont destinés à l'indexation de colonnes qui comportent peu de valeurs distinctes et beaucoup d'enregistrements pour chacune de ces valeurs : donc lorsque le rapport D tend vers 0.

A l'inverse des index B-Tree, les index Bitmap ne stockent pas un pointeur vers un enregistrement dans un fichier trié sur l'index, mais une valeur codée sur un bit (vrai ou faux) pour chaque valeur de la colonne indexée (2 bits pour une cardinalité 2, 3 pour une cardinalité 3, etc.) dans un fichier trié sur la clé.

De tels index optimisent la recherche relative à une question du type : "l'enregistrement appartient-il à un sous ensemble du domaine sur l'index ?".

Par exemple pour savoir si un enregistrement est de genre "Femme", il suffit de consulter un bit au lieu de comparer des chaînes.

Remarque

De plus pour répondre à la question "Quelles sont les femmes ingénieurs" (SELECT nom FROM personne WHERE genre='Femme' AND metier='Ingénieur'), si genre et métier sont indexés avec un index bitmap, alors la clause AND sera résolue par une simple opération logique sur les deux bits concernés. Cela fonctionne de la même façon pour OR.

Remarque

Enfin notons que les index Bitmap peuvent être compressés et donc consomment peu d'espace disque.

Attention

Les index Bitmap sont encore plus sensibles aux modifications des données que les index B-Tree (décompression, reconstruction, re-compression).

SyntaxeIndex B-Tree et Bitmap

La syntaxe classique crée par défaut un index de type B-Tree. Pour créer un index Bitmap le mot clé BITMAP doit être ajouté.

CTRL+C pour copier, CTRL+V pour coller
1
CREATE [BITMAP] INDEX nom_index ON TABLE nom_table (nom_attribut);
CREATE [BITMAP] INDEX nom_index ON TABLE nom_table (nom_attribut);