indexacion_y_asociacion_tema_4

=Indexación y Asociación=

=Introducción=
 * La utilización de las técnicas de indexación y asociación sirven para realizar consultas en una base de datos por medio de código SQL. Muchas consultas hacen referencia sólo a una pequeña parte de los registros de un archivo. Por ejemplo, la pregunta «Buscar todas las cuentas de la sucursal Cajasur» o «Buscar el saldo del número de cuenta C-101» hace referencia solamente a una fracción de los registros de la relación cuenta. No es eficiente para el sistema tener que leer cada registro y comprobar que el campo nombre- sucursal contiene el nombre «Cajasur» o el valor C-101 del campo número-cuenta. Lo más adecuado sería que el sistema fuese capaz de localizar directamente estos registros. Para facilitar estas formas de acceso se diseñan estructuras adicionales que se asocian con archivos.

> Algunos conceptos básicos que debemos tener en cuenta son: > Estos índices permiten un acceso directo rápido a los registros de un archivo se puede usar una estructura de índice. Cada estructura de índice está asociada con una clave de búsqueda concreta. Al igual que en el catálogo de una biblioteca, un índice almacena de manera ordenada los valores de las claves de búsqueda, y asocia a cada clave los registros que contienen esa clave de búsqueda. Los registros en el archivo indexado pueden estar a su vez almacenados siguiendo un orden, semejante a como los libros están ordenados en una biblioteca por algún atributo como el número decimal Dewey. Un archivo puede tener varios índices según diferentes claves de búsqueda. Si el archivo que contiene los registros está ordenado secuencialmente, el índice cuya clave de búsqueda especifica el orden secuencial del archivo es el índice primario. (El término índice primario se emplea algunas veces para hacer alusión a un índice según una clave primaria. Sin embargo, tal uso no es normal y debería evitarse.) Los índices primarios también se llaman índices con agrupación (clustering indices.) La clave de búsqueda de un índice primario es normalmente la clave primaria, aunque no es así necesariamente. Los índices cuyas claves de búsqueda especifican un orden diferente del orden secuencial del archivo se llaman índices secundarios o índices sin agrupación (non clustering indices). > > Veamos cada uno de estos índices con un poco más de profundidad: >>  >> Incluso si se usan índices dispersos, el propio índice podría ser demasiado grande para un procesamiento eficiente. En la práctica no es excesivo tener un archivo con 100.000 registros, con 10 registros almacenados en cada bloque. Si tenemos un registro índice por cada bloque, el índice tendrá 10.000 registros. Como los registros índices son más pequeños que los registros de datos, podemos suponer que caben 100registros índices en un bloque. Por tanto, el índice ocuparía 100 bloques. Estos índices de mayor tamaño se almacenan como archivos secuenciales en disco. >> >> Para realizar una actualización del índice no importa el tipo de índice que se esté usando, los índices se actualizarán siempre que se produzca una inserción o borrado de un registro del archivo. A continuación se describirán los algoritmos para actualizar índices de un solo nivel.
 * 1) =Conceptos Básicos:=
 * **Índices ordenados**. Estos índices están basados en una disposición ordenada de los valores.
 * **Índices asociativos (hash índices).** Estos índices están basados en una distribución uniforme de los valores a través de una serie de cajones (buckets).
 * **Tipos de acceso.** Tipos de accesos que se soportan eficazmente. Estos tipos podrían incluir la búsqueda de registros con un valor concreto en un atributo, o buscar los registros cuyos atributos contengan valores en un rango especificado.
 * **Tiempo de acceso.** El tiempo que se tarda en buscar un determinado elemento de datos, o conjunto de elementos, usando la técnica en cuestión.
 * **Tiempo de inserción.** El tiempo empleado en insertar un nuevo elemento de datos. Este valor incluye el tiempo utilizado en buscar 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 buscar 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.
 * 1) =Índices ordenados.=
 * Índice primario: En este apartado se asume que todos los archivos están ordenados secuencialmente según alguna clave de búsqueda. Estos archivos con índice primario según una clave de búsqueda se llaman archivos secuenciales indexados. Es uno de los esquemas más antiguos usados por sistemas de bases de datos. [[image:https://docs.google.com/File?id=ddw7zxmb_1cqs2zwff_b width="498" height="212"]]
 * __**Índices densos:**__ Aparece un registro índice por cada valor de la clave de búsqueda en el archivo. El registro índice contiene el valor de la clave y un puntero al primer registro con ese valor de la clave de búsqueda.
 * Índices dispersos: Sólo 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 búsqueda 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 más grande que sea menor o igual que el valor que se está buscando.
 * Índices multinivel.
 * Inserción: Primero se realiza una búsqueda usando el valor de la clave de búsqueda del registro a insertar, después se produce la inserción.
 * Borrado: Se busca el índice a eliminar.

>>

>> Los índices secundarios deben ser densos, con una entrada en el índice por cada valor de la clave de búsqueda, y un puntero a cada registro del archivo. Un índice primario puede ser disperso, almacenando sólo algunos de los valores de la clave de búsqueda, ya que siempre es posible encontrar registros con valores de la clave de búsqueda intermedios mediante un acceso secuencial a parte del archivo, como se describió antes. Si un índice secundario almacena sólo algunos de los valores de la clave de búsqueda, los registros con los valores de la clave de búsqueda intermedios pueden estar en cualquier lugar del archivo y, en general, no se pueden encontrar sin explorar el archivo completo. >> Un índice secundario sobre una clave candidata es como un índice denso primario, excepto en que los registros apuntados por los sucesivos valores del índice no están almacenados secuencialmente. >> En cambio, si la clave de búsqueda de un índice secundario no es una clave candidata, no sería suficiente apuntar sólo al primer registro de cada valor de la clave. >> El resto de registros con el mismo valor de la clave de búsqueda podrían estar en cualquier otro sitio del archivo, ya que los registros están ordenados según la clave de búsqueda del índice primario, en vez de la clave de búsqueda del índice secundario. Por tanto, un índice secundario debe contener punteros a todos los registros. >>  > =media type="file" key="ArbolB.swf" width="498" height="300"= Un inconveniente de la organización de archivos secuenciales es que hay que acceder a una estructura de índices para localizar los datos o utilizar una búsqueda binaria y, como resultado, más operaciones de E/S. La organización de archivos basada en la técnica de asociación (hashing) permite evitar el acceso a la estructura de índice. La asociación también proporciona una forma de construir índices. Se estudiarán las organizaciones de archivos e índices basados en asociación en los próximos apartados.
 * **Índices secundarios.**
 * 1) =Árboles B y Árboles B+=
 * 1) =Asociación estática.=

**__Funciones de asociación__**

La peor función posible de asociación asigna todos los valores de la clave de búsqueda al mismo cajón. Tal función no es deseable, ya que todos los registros tienen que guardarse en el mismo cajón. Una búsqueda tiene que examinar cada registro hasta encontrar el deseado. Una función de asociación ideal distribuye las claves almacenadas uniformemente a través de los cajones para que cada uno de ellos tenga el mismo número de registros.

Puesto que no se sabe durante la etapa de diseño qué valores de la clave de búsqueda se almacenarán en el archivo, se pretende elegir una función de asociación que asigne los valores de las claves de búsqueda a los cajones de manera que se cumpla lo siguiente:


 * **__Distribución //uniforme//__**//.// Esto es, cada cajón tiene asignado el mismo número de valores de la clave de búsqueda dentro del conjunto de todos los valores posibles de la clave de búsqueda.
 * **__Distribución //aleatoria//__**. Esto es, en el caso promedio, cada cajón tendrá casi el mismo número de valores asignados a él, sin tener en cuenta la distribución actual de los valores de la clave de búsqueda.

Para ser más exactos, el valor de asociación no será correlativo a ninguna orden exterior visible en los valores de la clave de búsqueda, como por ejemplo el orden alfabético o el orden determinado por la longitud de las claves de búsqueda; la función de asociación tendrá que parecer ser aleatoria.