# Acceso por valor

Para implementar los accesos por valor necesitaremos utilizar los índices. Un índice es una estructura de datos que mejora la velocidad de las operaciones por medio de identificador único de cada fila de una tabla, permitiendo así un rápido acceso a los registros de una tabla en una base de datos, tiene un funcionamiento similar al índice de un libro, puesto que guarda parejas de elementos: el elemento que se desea indexar y su posición en la base de datos. De forma general, al hablar de un índices, hablamos de un array de pares compuesto por el RID (el número de página y un número de VDF) y un valor dado.
Así tenemos que los índices en nuestra bases de datos son listados de datos ordenados alfabéticamente y que acompañan a nuestro archivo, permitiendo el acceso directo a los registros del fichero. El índice nos permite acceder a uno o varios campos conocidos como clave de indexación, la cual está compuesta por la clave de organización y el puntero al fichero de datos.
A la hora de crear los índices de la base de datos debemos de tener en cuenta los siguientes aspectos:
* Si su tamaño permite el almacenamiento en memoria externa.
* Cuál es el coste menor para acceder a los datos, es decir, que tipo de construcción del índice nos beneficia más.
* Si permiten una búsqueda binaria y por rangos.
* Se puede recuperar información sin modificar el fichero de datos.
* Evitar su uso frecuente.
* Limitar el tamaño definiéndolos con el menor número de columnas posible.
* Utilizar claves cortas en los índices agrupados.
* Considerar el orden de las columnas si el índice contiene varias.
Los Accesos por valor, al igual que los Accesos por posición, pueden ser secuenciales o directos, y a su vez se dividen en varios tipos:
* Índices.
* Árboles B+.
* Dispersión.
* Índices agrupados.

## Índices

Como hemos dicho más arriba, los índices nos mejoran el rendimiento de las consultas, ya que permiten ir directamente al registro, reduciendo así las entradas y salidas que tiene que hacer el SGDB. Por contra, nos encontramos que los índices pueden ocupar demasiada memoria.
Podríamos establecer como clasificación muy básica la siguiente:
* Índice primario.
* Simple o compuesto.
* No agrupado y agrupado.

### Índice primario

Este tipo de índice emplea la clave primaria de la tabla, indexandola junto con la dirección del registro. En ellos el número de entrada en el índice es igual al número de bloques que ocupe los datos en disco, por lo que es un tipo de índice no denso, ya que al tener una entrada por bloque de registros, sólo toma la clave primaria y el puntero del primer o último registro de cada bloque.
Esto tiene sus ventajas y sus inconvenientes, pues al no ser un índice denso, ocupará mucho menos que los registros en sí, pero al ser disperso, obliga al SGBD a realizar una lectura secuencial de la tabla a partir de la entrada del índice resultante de nuestra consulta a la base de datos.
Para entender mejor el por qué de lo que acabamos de explicar podemos ver como se crea un índice primario:
* El Sistema Operativo lee el fichero de datos y construye el array.
* El Sistema posteriormente lo ordena.
* Finalmente lo guarda.
En cuanto a la carga del índice, sigue los siguientes pasos:
* Se carga secuencialmente.
* El Sistema Operativo lee el archivo del índice bloque a bloque.
* Tras leerlo, lo pasa finalmente a la RAM.

### Índice compuesto

Esta clasificación de los índices tiene que ver con el número de columnas que toma de la tabla, de tal forma que un índice será simple si solo toma como valores a indexar los de una columna de la tabla, mientras que si toma los valores de varias columnas de la misma tabla será compuesto. Siguiendo el ejemplo que enlazamos en el apartado anterior, tendríamos un índice simple si solo tomamos los valores de la columna ID trb, mientras que si tomamos los valores de las columnas ID trb y Dept nos encontraríamos con un índice compuesto por dos atributos en el cual nos mostraría los trabajadores ordenados por su ID y nos mostraría el departamento en el que trabajan.

### No agrupado y agrupado

Los índices no agrupados tienen una estructura separada de las filas de datos contiendo los valores de clave de índice y por cada entrada de valor de clave tiene un puntero a la fila de datos que contiene el valor clave de la tabla a indexar. El puntero de una fila de índice no agrupado que apunta hacia una fila de datos se denomina localizador de fila. La estructura del localizador de filas depende de si las páginas de datos están almacenadas en un montón o en una tabla agrupada. Si están en un montón, el localizador de filas es un puntero hacia la fila. Si están en una tabla agrupada, el localizador de fila es la clave de índice clúster. No obstante se puede agregar columnas sin clave al nivel hoja de un índice no agrupado con el fin de eludir los límites existentes para las claves de índice, 900 bytes y 16 columnas de clave, así como para ejecutar consultas indexadas y totalmente cubiertas.
En cuanto a los índices agrupados, ordenan y almacenan las filas de los datos de la tabla o vista de acuerdo con los valores de la clave. Solo puede haber un índice agrupado por cada tabla, ya que las filas de datos solo pueden estar ordenadas por la clave que hayamos elegido como clave de índice. Es por ello que la única ocasión en la cual las filas de datos de una tabla están ordenadas es cuando la tabla contiene un índice de este tipo. Este tipo de índice lo desarrollaremos con más precisión en otro apartado siguiente.
* ↑ Índices no agrupados descritos
* ↑ Crear un índice no agrupado
* ↑ Índices agrupados descritos
* ↑ Crear índice agrupado.