Voir Indexation
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.
Par exemple SELECT nom FROM personne WHERE genre='Femme' AND pays='France
sera contre performante (R tend vers 0).
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.
Enfin notons que les index Bitmap peuvent être compressés et donc consomment peu d'espace disque.
Les index Bitmap sont encore plus sensibles aux modifications des données que les index B-Tree (décompression, reconstruction, re-compression).
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é.
CREATE [BITMAP] INDEX nom_index ON TABLE nom_table (nom_attribut);