Bases de Datos Indexación y Hashing 1 Indexación Jorge Pérez Rojas Universidad de Talca, II Semestre 2006
Bases de Datos Indexación y Hashing 2 Acceso a Datos Muchas consultas hacen referencia sólo a una pequeña parte de los datos Por ejemplo: Encontrar todos los empleados del departamento de Marketing hace referencia sólo a una pequeña fracción de los datos en la tabla empleado Es muy ineficiente que el sistema deba recorrer todos los registros e ir comprobando el código del departamento de cada empleado antes de dar la respuesta Lo ideal sería que el sistema pudiera localizar directamente estos registros Problema grave adicional: En el contexto de BDs los datos se encuentran físicamente en memoria secundaria acceso muy costoso
Bases de Datos Indexación y Hashing 3 Acceso a Datos (cont) Para aumentar la eficiencia de acceso se diseñan estructuras adicionales asociadas a los archivos que mantienen la información de la BD Existen distintas formas generales (sólo veremos construcción de índices) Cada una de las técnicas tiene ventajas y desventajas comparativas y deben evaluarse en función de: tiempo de acceso a datos tiempo de inserción de datos tiempo de eliminación de datos espacio extra necesario
Bases de Datos Indexación y Hashing 4 Índices La idea de un índice en una BD es la misma que en el caso de un índice de un libro de texto En un libro un índice alfabético permite ir directamente a la página asociada con cada entrada del índice Una situación similar ocurre en una biblioteca en donde se mantienen fichas indexadas por Autor, Tema, Título, que entregan la dirección (estante y número) de un libro para así encontrarlo fácilmente
Bases de Datos Indexación y Hashing 5 Indices (cont) Un índice se define para un atributo de una relación Se guarda para cada valor de este atributo las direcciones de todos los bloques que contienen tuplas con ese valor para dicho atributo Los valores en un índice se mantienen con cierto orden de modo que se puede buscar rápidamente Existen distintas técnicas de indexación, con distintas características Indexación por archivos secuenciales Indexación por Árboles B
Bases de Datos Indexación y Hashing 6 Indexación por Acceso Secuencial Es uno de los esquemas de indexación más antiguos Supone que los archivos (tuplas) se encuentran ordenados secuencialmente y por lo tanto tienen una llave de búsqueda primaria Por ejemplo, si los datos de los empleados se encuentran físicamente ordenados por nombre en el disco, el nombre del empleado se convierte en una llave de búsqueda Importante: no confundir con llave primaria de la relación! No olvidar que la búsqueda debe hacerse sobre memoria secundaria lenta Dos tipos de índices: índice denso, índice escaso
Bases de Datos Indexación y Hashing 7 Indice Denso Indice Tabla Campos Carcamo Chavez Cortez Figueroa Galvez Gomez Venegas Campos 11003441 campos@empresacl 800000 Carcamo 13447180 carcamo@empresacl 500000 Chavez 12008991 chabez@empresacl 600000 Cortez 11003442 cortez@empresacl 800000 Figueroa 09998711 figueros@empresacl 600000 Galvez 13556781 galvez@empresacl 600000 Gomez 13556788 gomez@empresacl 500000 Gonzalez 08881672 gonzalez@empresacl 2000000 Parra 10934412 parra@empresacl 300000 Pena 12008993 pena@empresacl 600000 Perez 10934411 perez@empresacl 300000 Vargas 12400113 vargas@empresacl 600000 Venegas 12400112 venegas@empresacl 600000 Un registro de índice para cada valor de la llave de búsqueda El registro contiene el valor de la llave y un puntero a la tupla
Bases de Datos Indexación y Hashing 8 Indice Denso (cont) Si queremos encontrar los datos para el empleado Cortez: Buscamos Cortez en el índice Seguimos el puntero para obtener los datos
Bases de Datos Indexación y Hashing 9 Indice Escaso Indice Escaso Tabla Campos Figueroa Parra Vargas Campos 11003441 campos@empresacl 800000 Carcamo 13447180 carcamo@empresacl 500000 Chavez 12008991 chabez@empresacl 600000 Cortez 11003442 cortez@empresacl 800000 Figueroa 09998711 figueros@empresacl 600000 Galvez 13556781 galvez@empresacl 600000 Gomez 13556788 gomez@empresacl 500000 Gonzalez 08881672 gonzalez@empresacl 2000000 Parra 10934412 parra@empresacl 300000 Pena 12008993 pena@empresacl 600000 Perez 10934411 perez@empresacl 300000 Vargas 12400113 vargas@empresacl 600000 Venegas 12400112 venegas@empresacl 600000 Registros de índice sólo para algunos valores de la llave
Bases de Datos Indexación y Hashing 10 Indice Escaso (cont) Si queremos encontrar los datos para el empleado Cortez: Buscamos la llave en el índice que es menor o igual a Cortez Resulta ser Campos en el ejemplo Seguimos el puntero a Campos y buscamos secuencialmente a Cortez en la tabla
Bases de Datos Indexación y Hashing 11 Indexación por Acceso Secuencial Qué tan rápida resulta la búsqueda? Si el índice es suficientemente pequeño podríamos hacer toda la búsqueda en memoria principal, lo que resulta muy rápido Generalmente, el índice no cabe completamente en memoria principal debemos hacer varias lecturas a memoria secundaria (disco) para encontrar el puntero buscado Índices grandes resultan costosos en cuanto a accesos a memoria secundaria Podemos solucionarlo tratando el índice como un archivo secuencial cualquiera, o sea, podemos construir un índice sobre el índice
Bases de Datos Indexación y Hashing 12 Indice de dos Niveles Indice Externo Indice Interno Bloques de Datos
Bases de Datos Indexación y Hashing 13 Indice de dos Niveles (cont) El índice externo se mantiene en memoria principal La búsqueda puede hacerse con menos acceso a memoria secundaria Se puede repetir el esquema en varios niveles
Bases de Datos Indexación y Hashing 14 Indexación por Acceso Secuencial Sin importar cuál sea la forma de indexación siempre debemos actualizar todos los índices cada vez que se inserta o elimina una tupla Esto por la necesidad de que los archivos estén ordenados secuencialmente Muy ineficiente para Bases de Datos en las que se realizan muchas inserciones o eliminaciones Mientras más datos en la BD más cuesta acceder y manipular los datos
Bases de Datos Indexación y Hashing 15 Indexación por Acceso Secuencial También se pueden indexar atributos no llaves, o sea, atributos por los que el archivo no se encuentra secuencialmente ordenados Se usan índices secundarios Un índice secundario apunta a bloques de punteros en memoria secundaria Se accede a un bloque de punteros y luego se realiza una búsqueda siguiendo los punteros que se encuentran en el bloque
Bases de Datos Indexación y Hashing 16 Indice Secundario Indice Secundario 08881672 11003441 12008993 13447180 Registros de Punteros Tabla Campos 11003441 campos@empresacl 800000 Carcamo 13447180 carcamo@empresacl 500000 Chavez 12008991 chabez@empresacl 600000 Cortez 11003442 cortez@empresacl 800000 Figueroa 09998711 figueros@empresacl 600000 Galvez 13556781 galvez@empresacl 600000 Gomez 13556788 gomez@empresacl 500000 Gonzalez 08881672 gonzalez@empresacl 2000000 Parra 10934412 parra@empresacl 300000 Pena 12008993 pena@empresacl 600000 Venegas 12400112 venegas@empresacl 600000 Índice secundario para el atributo rut
Bases de Datos Indexación y Hashing 17 Indice Secundario (cont) Para encontrar la tupla con rut 12008991 Entramos al registro apuntado por 11003441 Dentro de este registro se busca uno a uno en los punteros Se accede a las tuplas con rut 11003441 y 11003442 Finalmente se accede a la tupla con rut 12008991
Bases de Datos Indexación y Hashing 18 Indexación por Arboles B Los Árboles B (B+ Trees y BTrees) son una de las estructuras de datos más usadas para mantener índices de acceso a BD Son excelentes para hacer búsquedas externas en memoria secundaria (en disco) Aseguran un tiempo eficiente, de orden logarítmico en el peor caso, en cuanto al tiempo de procesamiento y en cuanto a la cantidad de accesos al disco
Bases de Datos Indexación y Hashing 19 Arboles B Estructura de Árbol balanceado, todas las hojas del árbol están a la misma profundidad Cada nodo del árbol se mantiene en una unidad (página) de memoria secundaria Cada nodo tiene un máximo y un mínimo de punteros a tuplas de la base de datos El árbol completo funciona como índice Las inserciones y eliminaciones de registros en el índice se pueden realizar de forma muy eficiente, no es necesario reconstruir el índice
Bases de Datos Indexación y Hashing 20 Indice de Arbol B Cortez Rios Campos Cárcamo Galvez Parra Soto Torres Bloques de Datos Árbol B para mantener un índice al atributo nombre No es necesario que el archivo de datos (tabla) esté físicamente ordenado en forma secuencial
Bases de Datos Indexación y Hashing 21 Indices en SQLServer Almacena los datos en páginas de 8 KB Un header de 96 bytes vincula estas páginas Los datos en las páginas se almacenan en orden (según la llave de búsqueda) El parámetro fill factor se usa para mantener las páginas ordenadas de forma eficiente Al crear el índice ordena las páginas de manera tal que cada una deje cierto porcentaje mínimo desocupado Un Árbol-B mantiene el índice de las páginas de datos
Bases de Datos Indexación y Hashing 22 Indices en SQLServer Para crear un índice se usa create index, por ejemplo create modif index mi_indice on tabla atributo en donde modif puede ser unique, clustered, nonclustered unique: virtualmente equivalente a una llave primaria clustered: ordena la tabla por el atributo indicado a lo más una por tabla nonclustered: no ordena la tabla, pueden ser muchas por tabla