03_BBDD.GVD.Bitmap

10
Grandes volúmenes de datos Índices Bitmap en Oracle bases de datos

description

base de datos

Transcript of 03_BBDD.GVD.Bitmap

Page 1: 03_BBDD.GVD.Bitmap

Grandes volúmenes de

datos Índices Bitmap en Oracle

bases de datos

Page 2: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Para columnas con un pequeño conjunto de valores posibles y con pocas actualizaciones

Por ejemplo, queremos saber las provincias de la comunidad valenciana (3) en las que nuestro clientes (millones) han vivido BitMap

2

Page 3: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Son una matriz de 0 y 1 En una coordenada esta todos los rowids

de la tabla y en la otra todos los posibles valores del índice

1 = la fila tiene ese valor 0 = la fila no lo tiene

3

Page 4: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

4

rowid Alicante Valencia Castellón

RWIDX 0 1 0

RWIDY 0 1 1

RWIDW 0 0 1

RWIDZ 1 0 0 RWIDU

1 1 0

clientes

El cliente cuyo registro tiene el ROWIDY

ha vivido en Valencia y Castellón

Page 5: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Ventajas

◦ Pueden suponer un ahorro de espacio frente a índices B-tree

◦ Condiciones AND/OR en la cláusula WHERE se resuelven de forma rápida realizando las correspondientes operaciones booleanas sobre el mapa de bits antes de convertir el mapa resultante a los identificadores de fila

5

Page 6: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Restricciones

◦ Sólo útiles para operaciones AND, OR, NOT, =

◦ No adecuados para operaciones de comparación <, >, <>

◦ No adecuados para aplicaciones con muchas transacciones concurrentes

6

Page 7: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Ejercicio

◦ Busca columnas en el esquema que sean adecuadas para índices bitmap

◦ Piensa en alguna columna a las ya existentes para la cual sería adecuado un índice bitmap

7

Page 8: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

columnas candidatas del ejemplo

◦ pedidos.esta_pedi

◦ ejecucion.nume_even

8

Page 9: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

Mapa de bits para la columna pedidos.esta_pedi

ROWID ‘C’ ‘R’

1xx 1 0

2xx 0 1

3Xx 1 0

4xx 0 1

5xx 1 0

6xx 0 1

9

where nume_pedi = ‘C’;

Page 10: 03_BBDD.GVD.Bitmap

Índices Bitmap en Oracle

where nume_even in (2, 3, 4)

in

1

0

1

1

RowId 2 3 4

1xxx 1 0 1

2xxx 0 0 0

3xxx 0 1 0

4xxx 0 1 1

10

nume_even