Les index bitmap

Les index bitmap permettent une recherche très aisée et rapide dans certains cas ; voici leur fonctionnement :
Un mot binaire est créé comportant autant de bits que de possibilité de valeurs de l'index. Ainsi, lors d'une recherche, un simple 'ET binaire' permet valider la correspondance de la valeur.

Il est donc compréhensible que ce type d'index soit le plus efficace sur un nombre de valeur réduit :
Ex : soit le champ civilité de la table personne indexé.
CREATE BITMAP INDEX IX_pers_civ
ON personne (civilite)

Les seules valeurs possibles sont 'M.' ; 'Mme' ; 'Melle' et NULL (non renseigné).
L'index sera donc sous la forme :
000 pour NULL
001 pour Melle
010 pour M.
100 pour Mme

Lors d'une recherche sur les éléments correspondant à Melle par exemple, Oracle effectuera un ET binaire entre la valeur de l'index et '001' (voir le rappel sur l'algèbre de bool) pour ne retenir que les valeurs recherchées.

On peut remarquer que contrairement aux index B-tree, les valeurs NULL correspondent à une valeur de l'index ; il sera donc utilisé lors de la recherche de null.

On comprend également aisément que ce type d'index est particulièrement efficace lorsque le nombre de valeurs différentes à indexer est faible et son inefficacité sur un timestamp ou un long.

Il faut cependant se limiter à utiliser ce type d'index sur des tables de paramètres par exemple car l'index est reconstruit à chaque insertion / modification de données de lignes (afin d'analyser les différentes valeurs de chaque tuple).

Il existe également ce qu'on appelle des index bitmap de jointure. Ils consistent en fait à créer le mot binaire en fonction des valeurs présentes dans la table de jointure :
CREATE BITMAP INDEX IX_BM_t1_t2chidx
ON t1 (t2.chidx)
from t1, t2
where t1.idt1 = t2.idt1


Pour tester si vos résultats sont meilleurs avec un index bitmap ou B-tree, vous pouvez vous aider du script de comparaison d'exécution du requête avec deux index ; sinon un benchmark (en anglais) permet de mieux comprendre quand et comment utiliser un index de type bitmap par rapport à un index de type B-tree.

Voir aussi :
- Les statistiques Oracle
- Les index B-tree
- Pourquoi mon index n'est pas utilisé ?
- Comparer l'exécution d'une requête avec 2 index différents
- Hint oracle et choix du plan d'exécution




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories