Vous êtes sur la page 1sur 5

CI-5313: Arquitectura y Administracion de Base de Datos I

Apuntes del curso


INDICES

Soraya Abad Mota

Version 1: Septiembre 2002


Actualizaciones: Enero 2005 y Septiembre 2007
Topico 3: Indices y estructuras para almacenarlos

Una vez estudiadas las organizaciones primarias de archivo y analizados los costos de
realizar operaciones ilustrativas sobre las mismas, esta claro que no se puede lograr mucha
flexibilidad en el acceso a los datos del archivo con ellas sino que el acceso esta restringido
a lo que permita la organizacion que uno haya elegido. Una manera de agregar flexibilidad
en el acceso a los datos y de mejorar los tiempos de acceso es crear una estructura de
acceso auxiliar que se utiliza conjuntamente con la organizacion primaria del archivo. A
esta estructura auxiliar se le llama ndice.
Antes de analizar en detalle las estructuras disponibles para construir ndices, es nece-
sario presentar la terminologa asociada con ellos y una clasificacion de los distintos tipos
de ndices.
Campo de indizacion (indexing field): campo dentro del registro del archivo de datos
sobre el cual se define el ndice. Usualmente una estructura de ndice asocia a cada valor
del campo de indizacion, una lista de apuntadores a todos los bloques de disco que poseen
registros con ese valor en el campo de indizacion. Si el campo en base al cual se construye
el ndice es una clave para el archivo, entonces se le denomina clave de indizacion.
Los ndices se pueden clasificar de acuerdo a varios criterios.

I Dependiendo de la organizacion utilizada para guardar la estructura del ndice en s:

Indices ordenados de un solo nivel.


Indices de varios niveles (Multi-level index), sobre todo se utilizan arboles de
busqueda para estructurarlos.
Indices basados en hashing.

II Dependiendo de la naturaleza del campo en base al cual se establece el ndice:

Indice primario (primary index): el campo de indizacion es clave para el archivo


de datos y define la organizacion primaria del archivo.
Indice cluster (clustering index): el campo de indizacion no tiene un valor unico
por registro de datos (no es clave), pero s define la organizacion primaria del
archivo de datos.
Indice secundario (secondary index): el campo de indizacion utilizado en este caso
no define la organizacion primaria del archivo de datos.

III Dependiendo de si existe un registro de ndice por cada registro del archivo de datos o
no.

Indice denso (dense index). Hay una interrelacion 1:1 entre los registros del ndice
y los registros de datos.
Indice no denso (sparse or nondense index). Hay una interrelacion 1:n entre los
registros del ndice y los registros de datos.

IV Dependiendo de si se utiliza un solo campo del registro como campo de indizacion o


mas de uno, tenemos: Indices con un solo campo o Indices con varios campos.
0.1. Indices ordenados de un solo nivel

La estructura de ndice esta ordenada por el campo de indizacion, de modo que se puede
hacer busqueda binaria sobre el ndice. El archivo de ndice es mucho mas pequeno que el
archivo de datos.

0.1.1. Indices Primarios

Un ndice primario es un archivo ordenado con registros de longitud fija y dos campos.
Un registro de ndice i del ndice esta formado por una pareja < Ki , Pi >, donde Ki es del
mismo tipo de la clave de ordenamiento del archivo de datos para el cual se esta creando
este ndice primario y Pi es un apuntador a bloque. El valor de Ki corresponde al valor de
la clave de ordenamiento del primer registro en el bloque apuntado por Pi , a este primer
registro se le llama registro ancla. Si K es un valor de la clave que esta en el bloque apuntado
por Pi , entonces se cumple la siguiente desigualdad Ki <= K <= Ki+1 donde Ki y Ki+1
son entradas consecutivas del archivo de ndice. El numero de entradas en el ndice es igual
al numero de bloques del archivo de datos.
Como el archivo de datos esta ordenado, cuando se actualizan los datos, los registros
del archivo cambian de posicion, algunos registros pueden cambiar de bloque con lo cual
los registros ancla pueden cambiar. Por lo tanto, al actualizar el archivo de datos muy
posiblemente sera necesario actualizar el archivo de ndice y por tratarse de un archivo
ordenado tambien esta operacion puede ser costosa. En consecuencia este tipo de ndice es
apropiado para un archivo datos que tenga ninguna o pocas actualizaciones.

0.1.2. Indices Cluster

Si el archivo de datos esta ordenado por un campo que no es clave, ese campo se puede
usar como campo de clustering para construir un ndice cluster. Lo que es comun a los
ndices primarios y cluster es que la organizacion fsica del archivo es de acuerdo al ndice,
los registros de datos estan dispuestos en el orden dado por el campo de indizacion. Esta
caracterstica los distingue de los ndices secundarios que se cubren en la proxima seccion.
Un ndice cluster es un archivo ordenado con registros de longitud fija de dos campos.
Una entrada i del ndice cluster esta formada por una pareja < Ci , Pi >, donde Ci es del
mismo tipo del campo de clustering, es decir del campo por el cual esta ordenado el archivo
de datos para el cual se esta creando este ndice cluster, y Pi es un apuntador a bloque. El
numero de entradas en el ndice cluster es igual al numero de valores distintos del campo
de clustering. Por lo tanto este es un ndice no denso.

0.1.3. Indices Secundarios

Un ndice secundario, a diferencia de los ndices primarios y los cluster, se define sobre
un campo que no determina la organizacion primaria del archivo y provee un camino de
acceso secundario al archivo de datos. Es un archivo ordenado cuyos registros tienen dos
campos. Una entrada i del ndice secundario esta formada por una pareja < CIi , Ai >,
donde CIi es el campo de indizacion y es del mismo tipo que algun campo del archivo de
datos, que no es un campo de ordenamiento, y Ai es un apuntador a bloque o un apuntador
a registro. Puede haber muchos ndices secundarios para un mismo archivo de datos, sin
embargo, solo puede haber un ndice primario o un ndice cluster para un archivo de datos.
Hay varias alternativas para los ndices secundarios, dependiendo de la naturaleza del
campo de indizacion. A continuacion presentamos estas alternativas.

1. Si se utiliza un campo que es un candidato a clave para el archivo de datos, como


campo de indizacion, se consigue un ndice denso, los apuntadores son a bloque, pero
hay una entrada del ndice por cada registro del archivo de datos.

2. Si se utiliza un campo que no es clave para el archivo de datos, hay varias opciones,
a saber:

a) Colocar varias entradas del ndice con el mismo valor CIi , una por cada registro
que tenga ese valor en el campo de indizacion.
b) Se permite que los registros del ndice secundario sean de longitud variable, pues
ahora el campo apuntador de este archivo es un campo multivaluado.
c) Se deja que los registros del ndice secundario sean de longitud fija, pero con un
segundo nivel de direccionamiento, pues ahora el apuntador Ai de la entrada i
del ndice apunta a un bloque que contiene los apuntadores a todos los registros
de datos que tienen el valor CIi en el campo de indizacion.

0.1.4. Ejemplos de ahorros de tiempo con los ndices

Antes de continuar con otras estructuras para organizar los ndices ilustramos el ahorro
en costos al utilizar ndices ordenados.
Tenemos un archivo de datos con los siguientes parametros:

r = 30.000 registros (numero total de registros en el archivo)

T = 1024 bytes (tamano del bloque de disco)

l = 100 bytes (longitud del registro de datos, se supone que es fija y que los registros
se almacenan en los bloques con la opcion unspanned).

bf r es el factor de bloqueo del archivo de datos.

B = 3000 bloques para almacenar el archivo de datos.

bf ri es el factor de bloqueo del archivo de ndice.

V = 9 es la longitud del campo por el cual esta ordenado el archivo de datos y el


campo de indizacion por el cual se construyo el ndice primario.

P = 6 es el tamano del apuntador.

li = 15 es la longitud del registro de ndice.


En el primer ejemplo, comparamos la busqueda por igualdad utilizando una organizacion
primaria de archivo ordenado para el archivo de datos con un ndice primario. En ambos
casos se utiliza el mismo campo para la organizacion primaria y para el ndice y este es el
mismo campo por el cual se esta realizando la busqueda.
Con el archivo ordenado, como organizacion primaria del archivo de datos se puede
aplicar busqueda binaria, la cual tiene un costo de dlog2 be = dlog2 3000e = 12.
Con el ndice primario por el campo de ordenamiento del archivo de datos, tenemos
que: caben bf ri = b1024/15c = 68 registros de ndice por bloque. Como es un ndice
primario, el campo de ordenamiento es clave, por lo tanto ri , el numero de registros de
ndice es igual al numero de bloques del archivo de datos. Por lo cual el archivo de ndice
necesita ri /bf ri = b3000/68c = 45 bloques. La busqueda binaria en el ndice cuesta:
d(log2 45)e = 6 accesos a bloque + 1 para los datos, lo cual da un total de 7 accesos a
bloque.
Para ilustrar la ayuda que puede brindar un ndice secundario, supongamos que la
busqueda por igualdad se va a hacer por un campo que no es el campo por el cual esta or-
ganizado el archivo de datos, de modo que no hay un ndice primario ni uno cluster definido
para ese campo. En este caso, para buscar un valor de ese campo se necesita en promedio,
revisar la mitad de los bloques de disco que ocupa el archivo de datos, en otras palabras,
necesitamos acceder b/2 = 3000/2 = 1500 bloques en promedio. Si creamos un ndice se-
cundario por este campo y suponemos que la longitud de ese campo es 9 bytes. El bf ri = 68
y el ndice debe ser denso, por lo cual Bi = d30000/68e = 442 bloques. Una busqueda
binaria sobre este ndice requiere de: dlog2 442e = 9 accesos a bloques del ndice + 1 para
acceder al registro de datos, lo cual da un total de 10 accesos a bloque y es bastante mejor
que los 1500 accesos necesarios al no tener el ndice secundario.

Vous aimerez peut-être aussi