Ir al contenido principal

INDICE BIPMAP

En muchas aplicaciones de negocio, la naturaleza de los datos y las consultas es tal que índices B*TREE no son de mucha utilidad. Considere la tabla de ventas para una cadena de supermercados. Almacena un año de datos históricos, que pueden ser analizados en varias dimensiones. La figura 9-6 muestra un simple diagrama entidad relación, que solo cuatro de las dimensiones.
Suponiendo una distribución uniforme de los datos, solo dos de las dimensiones (producto y fecha) tiene una selectividad que es mejor que el criterio de uso general  de 2 por ciento a 4 por ciento, que hace un índice que vale la pena. Pero si consultas utilizan predicados de rango (tales como cantidad de ventas en el mes o de una clase de productos  de diez o más), entonces ni siquiera estos se clasificaran. Esto es un simple hecho: los índices B*TREE a menudo son inútiles en una entorno Data Warehouse. Una consulta típica podría ser que desee comparar las ventas entre dos tiendas para atender a clientes de una determinada clase de producto en un mes. Podrían bien haber índices B*TREE en las columnas relevantes, pero Oracle ignora como insuficiente selectivo. Esto es que los índices Bitmap están diseñados para.
Un índice Bitmap almacena los ROWIDS asociado con cada valor llave como un Bitmap. El Bitmap para el índice CHANNEL podría tener este aspecto:

WALKIN 11010111000101011101011101.....
DELIVERY 00101000111010100010100010.....

Esto indica que las dos primeras filas fueron ventas a entrega a los clientes, la tercera venta era una entrega, la cuarta venta fue entrega, y asi sucesivamente.
Los Bitmaps para índices de SHOP podrían ser.

LONDON 11001001001001101001010000.....
OXFORD 00100010011000010001001000.....
READING 00010001000100000100100010.....
GLASGOW 00000100100010000010000101.....

Esto indica que las dos primeras ventas fueron en la Tienda de London, la tercera fue en Oxford, la cuarta en Reading, y así sucesivamente. Ahora si esta consulta es recibida;

select count(*) from sales where channel='WALKIN' and shop='OXFORD';

Oracle puede recuperar los dos Bitmaps pertinentes y agregarlas junto con una operación booleana AND:

WALKIN 11010111000101011101011101.....
OXFORD 00100010011000010001001100.....
WALKIN & OXFORD 00000010000000010000000000.....

El resultado de la operación AND muestra que solo el séptima y decima séptima filas califican para la selección.  Esta combinación de Bitmaps es muy rápida y puede ser utilizada para implementar  complejas operaciones Booleanas con muchas condiciones en muchas columnas utilizando cualquier combinación de operaciones AND, OR y NOT. Una ventaja especial que los índices Bitmaps tienen por arriba que los índices B*TREE es que incluyen valores NULL. En cuanto al índice Bitmap se refiere,  NULL es solo otro valor distinto, que tendrá su propio Bitmaps. 
En general, Índices Bitmaps deben ser utilizados si:

La Cardinalidad (el numero de valores distintos) en la columna es baja.
El numero de filas en la tabla es alto, y
La columna es utilizada en operaciones de algebra Booleana.

EN EL TRABAJO
Si usted supiera por adelantado cual serian las consultas, entonces usted puede construir Índices B*TREE que trabajarían, tales como un índice compuesto en SHOP y CHANNEL. Pero por lo general no sabe, que es donde la combinación dinámica de Bitmaps da gran flexibilidad

Comentarios