Les indexes BitMap sont très utiles pour les colonnes des tables à faible cardinalité.
Par exemple, une table XXX contenant 1.000.000 enregistrements avec une colonne STATUT ayant au maximum 1% de la volumétrie de valeurs distinctes, soit 10.000 valeurs différentes possibles.
Dans ce genre de cas, l’utilisation d’index BitMap est très pratique… la preuve par l’exemple…
CREATE TABLE Test_BitMap( id NUMBER , valeur VARCHAR2(255) , bitMap VARCHAR2(3) ); DECLARE v_bitMap VARCHAR2(3); BEGIN FOR i IN 1..1000000 LOOP IF (MOD(i, 2) = 0) THEN v_bitMap := 'V_1'; ELSIF (MOD(i, 3) = 0) THEN v_bitMap := 'V_2'; END IF; INSERT INTO Test_BitMap VALUES (i, 'valeur '||i, v_bitMap); END LOOP; COMMIT; END; / CREATE INDEX Test_BitMap_Idx_2 ON Test_BitMap(bitMap) ;
Regarder le plan d’exécution de la requête :
SELECT /*+ index (Test_BitMap Test_BitMap_Idx_2) */ * from Test_BitMap where bitMap = 'V_1';
Supprimer l’index et le remplacer par index BitMap.
DROP INDEX Test_BitMap_Idx_2; CREATE BITMAP INDEX Test_BitMap_Idx_2 ON Test_BitMap(bitMap) ;
Relancer la requête de sélection et admirer le nouveau plan d’exécution.