Está en la página 1de 31

INDICES

Miguel Orquera

Conceptos bsicos

Muchas consultas hacen referencia slo a una pequea


parte de los registros de un archivo. Por ejemplo, la
consulta "Buscar todas las cuentas de la sucursal
Pamplona" o "Buscar el saldo del nmero de cuenta C-101"
hace referencia solamente a una fraccin de los registros de
la relacin cuenta.
No es eficiente que el sistema tenga que leer cada registro
y comprobar que el campo nombreSucursal contiene el
nombre "Pamplona" o el valor C-101 del campo nroCuenta.
Lo ms adecuado sera que el sistema fuese capaz de
localizar directamente esos registros. Para facilitar estas
formas de acceso se disean estructuras adicionales que se
asocian con los archivos.

Conceptos bsicos

nroCuenta

nombreSucursal

saldo

puntero

Conceptos bsicos

Un ndice para un archivo del sistema funciona


como el ndice de un libro. Si se va a buscar un
tema (especificado por una palabra o una frase) se
puede buscar en el ndice al final del libro,
encontrar las pginas en las que aparece y
despus leerlas para encontrar la informacin
buscada. Las palabras del ndice estn ordenadas
alfabticamente, lo cual facilita la bsqueda.
Adems, el ndice es mucho ms pequeo que el
libro, con lo que se reduce an ms el esfuerzo
necesario para encontrar las palabras en cuestin.

Conceptos bsicos

Los ndices de los sistemas de bases de datos juegan el


mismo papel que los ndices de los libros en las bibliotecas.
Por ejemplo, para recuperar un registro cuenta dado su
nmero de cuenta, el sistema de bases de datos buscara en
un ndice para encontrar el bloque de disco en que se
localice el registro correspondiente, y entonces extraera ese
bloque de disco para obtener el registro cuenta.
Almacenar una lista ordenada de nmeros de cuenta no
funcionara bien en bases de datos muy grandes con
millones de cuentas, ya que el propio ndice sera muy
grande; por lo que encontrar una cuenta podra consumir
mucho tiempo. En su lugar se usan tcnicas ms sofisticadas
de indexacin.

Tipos de ndices

Hay dos tipos bsicos de ndices:


ndices ordenados. Estos ndices estn
basados en una disposicin ordenada de los
valores.
ndices asociativos. Estos ndices estn
basados en una distribucin uniforme de los
valores a travs de una serie de cajones
(buckets). El valor asignado a cada cajn est
determinado por una funcin, llamada funcin
de asociacin (hash function).

Tipos de ndices

Se pueden comparar los ndices con los siguientes parmetros:


Tipos de acceso. Los tipos de acceso que se soportan eficazmente. Estos tipos
podran incluir la bsqueda de registros con un valor concreto en un atributo, o la
bsqueda de los registros cuyos atributos contengan valores en un rango
especificado.
Tiempo de acceso. El tiempo que se tarda en hallar un determinado elemento de
datos, o conjunto de elementos, usando la tcnica en cuestin.
Tiempo de insercin. El tiempo empleado en insertar un nuevo elemento de datos.
Este valor incluye el tiempo utilizado en hallar el lugar apropiado donde insertar el
nuevo elemento de datos, as como el tiempo empleado en actualizar la estructura
del ndice.
Tiempo de borrado. El tiempo empleado en borrar un elemento de datos. Este valor
incluye el tiempo utilizado en hallar el elemento a borrar, as como el tiempo
empleado en actualizar la estructura del ndice.
Espacio adicional requerido. El espacio adicional ocupado por la estructura del
ndice. Como normalmente la cantidad necesaria de espacio adicional suele ser
moderada, es razonable sacrificar el espacio para alcanzar un rendimiento mejor.

Claves de bsqueda

A menudo se desea tener ms de un ndice por archivo.


Por ejemplo se puede buscar un libro segn el autor, la
materia o el ttulo.
Los atributos o conjunto de atributos usados para buscar
en un archivo se llaman claves de bsqueda. Hay que
observar que esta definicin de clave difiere de la usada
en clave primaria, clave candidata y superclave. Este
doble significado de clave est (desafortunadamente)
muy extendido en la prctica.
Usando el concepto de clave de bsqueda se determina
que, si existen varios ndices para un archivo existirn
varias claves de bsqueda.

ndices ordenados

Para permitir un acceso directo rpido a los


registros de un archivo se puede usar una
estructura de ndice. Cada estructura de
ndice est asociada con una clave de
bsqueda concreta. Al igual que en el catlogo
de una biblioteca, un ndice almacena de
manera ordenada los valores de las claves de
bsqueda, y asocia a cada clave los registros
que contienen esa clave de bsqueda.

ndices agrupados y
no agrupados

Los registros en el archivo indexado pueden estar a su vez


almacenados siguiendo un orden, semejante a como los libros estn
ordenados en una biblioteca por algn atributo como el nmero
decimal Dewey. Un archivo puede tener varios ndices segn
diferentes claves de bsqueda. Si el archivo contiene que los registros
est ordenado secuencialmente, el ndice cuya clave de bsqueda
especifica el orden secuencial del archivo es el ndice agrupado
(clustering index). Los ndices agrupados tambin se llaman ndices
primarios; el trmino ndice primario se usa algunas veces para hacer
alusin a un ndice segn una clave primaria pero en realidad se
puede usar sobre cualquier clave de bsqueda. La clave de bsqueda
de un ndice agrupado es normalmente la clave primaria, aunque no
es as necesariamente. Los ndices cuyas claves de bsqueda
especifican un orden diferente del orden secuencial del archivo se
llaman ndices no agrupados (non clustering indices) o secundarios.

Archivos secuenciales
indexados

Los archivos con un ndice agrupado segn la


clave de bsqueda se llaman archivos
secuenciales indexados. Representan uno de
los esquemas de ndices ms antiguos usados
por los sistemas de bases de datos. Se usan
en aquellas aplicaciones que demandan un
procesamiento secuencial del archivo
completo, as como un acceso directo a sus
registros.

ndices densos y dispersos

Un registro ndice o entrada del ndice consiste


en un valor de la clave de bsqueda y
punteros a uno o ms registros con ese valor
de la clave de bsqueda. El puntero a un
registro consiste en el identificador de un
bloque de disco y un desplazamiento en el
bloque de disco para identificar el registro
dentro del bloque.
Existen dos clases de ndices ordenados que
se pueden usar: densos y dispersos

ndices densos

Aparece un registro ndice por cada valor de la clave de


bsqueda en el archivo. En un ndice denso agrupado el
registro ndice contiene el valor de la clave y un puntero al
primer registro con ese valor de la clave de bsqueda. El
resto de registros con el mismo valor de la clave de
bsqueda se almacenan consecutivamente despus del
primer registro, dado que, ya que el ndice es con
agrupacin, los registros se ordenan sobre la misma clave
de bsqueda.
Las implementaciones de ndices densos pueden almacenar
una lista de punteros a todos los registros con el mismo
valor de la clave de bsqueda; esto no es esencial para los
ndices con agrupacin.

ndices densos

ndices dispersos

Slo se crea un registro ndice para algunos de los


valores. Al igual que en los ndices densos, cada
registro ndice contiene un valor de la clave de
bsqueda y un puntero al primer registro con ese
valor de la clave. Para localizar un registro se
busca la entrada del ndice con el valor ms
grande que sea menor o igual que el valor que se
est buscando. Se empieza por el registro
apuntado por esa entrada del ndice y se contina
con los punteros del archivo hasta encontrar el
registro deseado.

ndices dispersos

ndices densos y
dispersos

Como se ha visto, generalmente es ms rpido localizar un


registro si se usa un ndice denso en vez de un ndice disperso. Sin
embargo, los ndices dispersos tienen algunas ventajas sobre los
ndices densos, como el utilizar un espacio ms reducido y un
mantenimiento adicional menor para las inserciones y borrados.
Existe un compromiso que el diseador del sistema debe
mantener entre el tiempo de acceso y el espacio adicional
requerido. Un buen compromiso es tener un ndice disperso con
una entrada del ndice por cada bloque. Es tos porque el mayor
coste de procesar una peticin en la base de datos es el empleado
en traer un bloque de disco a la memoria. Una vez el bloque en
memoria, el tiempo en examinarlo es prcticamente despreciable.

ndices multinivel

Aunque se use un ndice disperso, puede que el propio


ndice sea demasiado grande para un procesamiento
eficiente. En la prctica no es excesivo tener un
archivo con 100.000 registros, con 10 registros
almacenados en cada bloque. Si se dispone de un
registro ndice por cada bloque, el ndice tendr
10.000 registros. Como los registros ndices son ms
pequeos que los registros de datos, se puede suponer
que caben 100 registros ndices en un bloque. Por
tanto el ndice ocupara 100 bloques. Estos ndices de
mayor tamao se almacenan como archivos
secuenciales en disco.

ndices multinivel

Si un ndice es lo bastante pequeo como para guardarlo en la


memoria principal, el tiempo de bsqueda para encontrar una
entrada ser breve. Sin embargo, si el ndice es tan grande que
se debe guardar en disco, buscar una entrada implicar leer
varios bloques de disco. Para localizar una entrada en el ar
chivo ndice se puede realizar una bsqueda binaria, pero aun
as sta conlleva un gran coste. Si el ndice ocupa b bloques, la
bsqueda binaria tendr que leer a lo sumo |log2(b)| bloques. (|
x | denota el menor entero que es mayor o igual que x; es
decir, se redondea hacia abajo). Para el ndice de 100 bloques,
la bsqueda binaria necesitar leer siete bloques. En un disco
en el que la lectura de un bloque tarda 30 milisegundos, la
bsqueda emplear 210 milisegundos, que es bastante.

ndices multinivel

Para resolver este problema el ndice se trata como si


fuese un archivo secuencial y se construye un ndice
disperso sobre el ndice con agrupacin, como se muestra
en la Figura. Para localizar un registro se usa en primer
lugar una bsqueda binaria sobre el ndice ms externo
para buscar el registro con el mayor valor de la clave de
bsqueda que sea menor o igual al valor deseado. El
puntero apunta a un bloque en el ndice ms interno. Hay
que examinar este bloque hasta encontrar el registro con
el mayor valor de la clave que sea menor o igual que el
valor deseado. El puntero de este registro apunta al
bloque del archivo que contiene el registro buscado.

ndices multinivel

ndices multinivel

Usando los dos niveles de indexacin y con el ndice ms


externo en memoria principal hay que leer un nico bloque
ndice, en vez de los siete que se lean con la bsqueda
binaria. Si al archivo es extremadamente grande, incluso el
ndice exterior podra crecer demasiado para caber en la
memoria principal. En este caso se podra crear todava
otro nivel ms de indexacin. De hecho, se podra repetir
este proceso tantas veces como fuese necesario. Los
ndices con dos o ms niveles se llaman ndices multinivel.
La bsqueda de registros usando un ndice multinivel
necesita claramente menos operaciones' de E/S que las
que se emplean en la bsqueda de registros con la
bsqueda binaria.

Actualizacin de un
ndice

Sin importar el tipo de ndice que se est


usando, los ndices se deben actualizar siempre
que se inserte o borre un registro del archivo. A
continuacin se describirn los algoritmos para
actualizar ndices de un solo nivel.
Insercin. Primero se realiza una bsqueda
usando el valor de la clave de bsqueda del
registro a insertar. Las acciones que emprende
el sistema a continuacin dependen de si el
ndice es denso o disperso.

Actualizacin de un
ndicesdensos
1. Si el valor de la clave de bsqueda no aparece en el ndice,
el sistema inserta en ste un registro ndice con el valor de
la clave de bsqueda en la posicin adecuada.
2. En caso contrario se emprenden las siguientes acciones:
a) Si el registro ndice almacena punteros a todos los registros con
el mismo valor de la clave de bsqueda, el sistema aade un
puntero al nuevo registro en el registro ndice.
b) En caso contrario, el registro ndice almacena un puntero slo
hacia el primer registro con el valor de la clave de bsqueda. El
sistema sita el registro insertado despus de los otros con los
mismos valores de la clave de bsqueda.

Actualizacin en
ndices
dispersos
Se asume que el ndice almacena una entrada
por cada bloque. Si el sistema crea un bloque
nuevo, inserta el primer valor de la clave de
bsqueda (en el orden de la clave de bsqueda)
que aparezca en el nuevo bloque del ndice. Por
otra parte, si el nuevo registro tiene el menor
valor de la clave de bsqueda en su bloque, el
sistema actualiza la entrada del ndice que
apunta al bloque; si no, el sistema no realiza
ningn cambio sobre el ndice.

Borrado en ndices
densos

1. Si el registro borrado era el nico registro con ese valor


de la clave de bsqueda, el sistema borra el registro
ndice correspondiente del ndice.
2. En caso contrario se emprenden las siguientes acciones:
a. Si el registro ndice almacena punteros a todos los registros
con el mismo valor de la clave de bsqueda, el sistema
borra del registro ndice el puntero al registro borrado.
b. En caso contrario, el registro ndice almacena un puntero
slo al primer registro con el valor de la clave de bsqueda.
En este caso, si el registro borrado era el primer registro
con el valor de la clave de bsqueda, el sistema actualiza
el registro ndice para apuntar al siguiente registro.

Borrado en ndices
dispersos

1. Si el ndice no contiene un registro ndice con el valor de la


clave de bsqueda del registro borrado, no hay que hacer
nada.
2. En caso contrario se emprenden las siguientes acciones:
a. Si el registro borrado era el nico registro con la clave de
bsqueda, el sistema reemplaza el registro ndice
correspondiente con un registro ndice para el siguiente valor de
la clave de bsqueda (en el orden de la clave de bsqueda). Si
el siguiente valor de la clave de bsqueda ya tiene una entrada
en el ndice, se borra en lugar de reemplazarla.
b. En caso contrario, si el registro ndice para el valor de la clave
de bsqueda apunta al registro a borrar, el sistema actualiza el
registro ndice para que apunte al siguiente registro con el
mismo valor de la clave de bsqueda.

ndices no agrupados

Los ndices no agrupados deben ser densos, con una


entrada en el ndice por cada valor de la clave de
bsqueda, y un puntero a cada registro del archivo. Un
ndice agrupado puede ser disperso, almacenando slo
algunos de los valores de la clave de bsqueda, ya que
siempre es posible encontrar registros con valores de la
clave de bsqueda intermedios mediante un acceso
secuencial a parte del archivo, como se describi antes. Si
un ndice no agrupado almacena slo algunos de los
valores de la clave de bsqueda, los registros con los
valores de la clave de bsqueda intermedios pueden estar
en cualquier lugar del archivo y, en general, no se pueden
encontrar sin explorar el archivo completo.

ndices no agrupados sobre claves


candidatas

Un ndice secundario sobre una clave candidata es


como un ndice denso agrupado, excepto en que los
registros apuntados por los sucesivos valores del
ndice no estn almacenados secuencialmente.
Generalmente los ndices secundarios estn
estructurados de manera diferente a como lo estn los
ndices con agrupacin. Si la clave de bsqueda de un
ndice agrupado no es una clave candidata, es
suficiente si el valor de cada entrada en el ndice
apunta al primer registro con ese valor en la clave de
bsqueda, ya que los otros registros podran ser
alcanzados por una bsqueda secuencial del archivo.

ndices no agrupados sobre


claves de bsqueda que no son
candidatas

Si la clave de bsqueda de un ndice no agrupado no es una


clave candidata, no sera suficiente apuntar slo al primer
registro de cada valor de la clave. El resto de registros con el
mismo valor de la clave de bsqueda podra estar en
cualquier otro sitio del archivo, ya que los registros estn
ordenados segn la clave de bsqueda del ndice agrupado,
en vez de la clave de bsqueda del ndice no agrupado.
Se puede usar un nivel adicional de referencia para
implementar los ndices no agrupados sobre claves de
bsqueda que no sean claves candidatas. Los punteros en
estos ndices no agrupados no apuntan directamente al
archivo. En vez de eso, cada puntero apunta a un cajn que
contiene punteros al archivo. Ver figura

ndices no agrupados sobre


claves de bsqueda que no son
candidatas