Index Bitmap

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.

Laisser un commentaire