Los índices bitmaps funcionan de forma diferente. En un indice bitmap, en vez de una lista de rowids, se crea un mapa de bits para cada valor clave del indice. Cada bit del mapa corresponde a un rowid posible. Si el bit esta en 1, significa que el rowid contiene dicho valor clave. Los indices bitmap ofrecen la misma funcionalidad que los indices B-tree, pero con una representacion interna distinta.
IMPORTANTE: Si la cantidad de valores diferentes que puede tomar el dominio el indice es pequeá, entonces el indice bitmap sera muy eficiente en cuanto al uso de espacio fisico.
Veamos un ejemplo:
Supongamos que tenemos la siguiente tabla de clientes:
CLIENTE APELLIDO ESTADO_CIVIL 1 ALONSO CASADO 2 GARCIA SOLTERO 3 LOPEZ DIVORCIADO 4 SAN MARTIN SOLTERO
La columna estado civil tiene baja cardinalidad, ya que los valores posibles son muy pocos (ESTADO, CASADO, SOLTERO). Hay solamente tres valores posibles por lo tanto un indice bitmap seria apropiado para esta columna. Sin embargo, no es recomendable un indice bitmap para la columna CLIENTE o APELLIDO, dada su alta cardinalidad.
La representación interna sería la siguiente:
CASADO SOLTERO DIVORCIADO
1 0 0
0 1 0
0 0 1
1 0 1
Un indice bitmap puede resolver esta sentencia con gran eficiencia contando la cantidad de unos existentes en el mapa de bits resultante como se muestra en la siguiente figura
select count(*) from CLIENTES
where ESTADO_CIVIL in ('SOLTERO','DIVORCIADO');
No hay comentarios:
Publicar un comentario