1© A. Jaime 2005 DBD Tema 6
Tema 6. Organización interna y diseño físico
Almacenamiento de registros y organizaciones de ficheros primarios Elmasri/Navathe 02
• Introducción• Dispositivos de almacenamiento secundario• Acceso paralelo al disco mediante tecnología RAID• Almacenamiento intermedio de bloques• Grabación de registros de un fichero en disco• Operaciones con ficheros• Ficheros de registros no ordenados (ficheros de montón)• Ficheros de registros ordenados (ficheros ordenados)• Técnicas de direccionamiento calculado• Otras organizaciones primarias de ficheros
•Índices basados en árboles B+
•Índices sobre claves múltiples•Otros tipos de índices
Estructuras de índices para ficherosElmasri/Navathe 02
Diseño y ajuste práctico de bases de datos Elmasri/Navathe 02
•Factores que influyen en el diseño físico de BD•Pautas para diseño físico de BD relacionales
2© A. Jaime 2005 DBD Tema 6
Almacenamiento de datos
• Almacenamiento primario de datos– La CPU puede acceder a los datos directamente– Acceso rápido pero capacidad limitada– Memoria principal: DRAM (Dynamic Random
Access Memory), bajo coste, volátil– Memoria caché: RAM estática, más pequeña, más
rápida y más cara• Almacenamiento secundario de datos
– La CPU no puede acceder directamente: hay que copiarlos antes a memoria principal
– Más lento, mayor capacidad y más baratos– Discos ópticos– Discos magnéticos– Cintas
• Memorias flash– Algo menos que primario y más que secundario– Se usa como disco con conexión USB, en cámaras de
fotos digitales o en MP3 players– Es no volátil– Tecnología EEPROM (Electrically Erasable
Programmable Read-Only Memory)– Lectura rápida pero escritura lenta– Escribe la información por bloques. Si se quiere
modificar algo de un bloque, hay que leerlo entero, modificarlo y sobreescribirlo
3© A. Jaime 2005 DBD Tema 6
Almacenamiento secundario de datos
• Discos ópticos:– 640 MB– CD-ROM (Compact Disk Read-Only Memory): vienen
pregrabados y no pueden sobrescribirse– CD-R grabables. – CD-RW regrabables. Estos dos últimos se han hecho
populares para respaldos.– Juke-boxes: array de CD-ROM extraíbles. Capacidad de
cientos de GB. Más lentos que los discos magnéticos– DVD (Digital Video Disk): entre 4,5 y 15GB
• Cintas:– Se usan para respaldos periódicos (por ej. de las BD)– Acceso secuencial (lento)– Muy barato y gran capacidad pero NO son datos on-line
(almacenamiento terciario)– Juke-boxes: banco de cintas catalogadas que pueden ser
cargadas automáticamente en la unidad.• Las BD normalmente residen en almacenamiento secundario
y se van leyendo porciones a memoria• BD en memoria principal:
– Cuando es posible descargar toda la BD en memoria– Se mantiene una copia de respaldo en disco– Es útil en aplicaciones de tiempo real, que necesitan
tiempos de respuesta muy rápidos
4© A. Jaime 2005 DBD Tema 6
Almacenamiento de BD
• Las BD se almacenan en ficheros de registros• Un registro es una colección de valores de datos
(por ejemplo una tupla del modelo relacional)• Los registros deben almacenarse de modo que sea
posible localizarlos de manera eficiente
• El SGBD ofrece varias opciones para organizar los datos
• El diseño físico de BD consiste en elegir entre estas opciones las más adecuadas para los requisitos de la aplicación
• Estudiaremos las principales:– Organizaciones de datos, que determinan la
forma en la que se colocan los registros en el disco y por tanto cómo se puede acceder a ellos:
• Ficheros de montón• Ficheros ordenados • Ficheros de direccionamiento calculado • Ficheros con índices (primarios, de
agrupación, secundarios)– Métodos de acceso
5© A. Jaime 2005 DBD Tema 6
Discos magnéticos
• Almacenan gran cantidad de datos (40GB, ... en continuo aumento y en continua reducción de precio)
• Hechos de material magnético, con una o varias superficies de una o dos caras cada una.
• Una cabeza móvil o varias cabezas fijas sobre las pistas (lo segundo es más rápido pero más caro y menos utilizado)
• Nº pistas: varía de cientos a miles de pistas por superficie
...
EjeRotación del disco
Pistas del mismo cilindro
Impulsor
Pista
Sector
Movimientoimpulsor
Cabeza delectura/escrituraBrazo
bloques de datos
6© A. Jaime 2005 DBD Tema 6
Discos magnéticos (2)
• Los sectores (opcional) son divisiones físicas del disco• Densidad de grabación:
– Puede ser la misma en todas las pistas – También puede ser mayor en pistas centrales y
menor en las más extremas
• Los bloques (o páginas) son divisiones creadas por el sistema operativo al formatear el disco (no cambia dinámicamente)
• Todos los bloques del disco tienen el mismo tamaño (entre 512 y 4.096 bytes)
• Los bloques están separados por espacios interbloque con información de control (grabada en el formateo)
• El paquete de discos gira continuamente a una velocidad que suele estar entre 3.600 y 7.200 rpm
• Los disquetes, sin embargo, dejan de girar tras completarse cada transferencia de datos
• El controlador de disco hace de interfaz entre el disco y el sistema computador. Son muy utilizados los controladores SCSI, IDE ...
7© A. Jaime 2005 DBD Tema 6
Registro, bloque y búfer
• Registro: entidad (E/R), tupla (relacional), fila (SQL), ...
• Bloque:– Unidad de transferencia entre disco y memoria– Formado por uno o varios registros
• Acceso directo (o aleatorio) a un bloque:– La dirección de un bloque la forman: el nº de
superficie, nº de pista y nº de bloque• Búfer: espacio en memoria principal en el que cabe
un bloque
• Tiempo para transferir un bloque entre disco y memoria (o viceversa): entre 12 y 60 mseg.
• Tiempo bastante alto en comparación con lo que tarda la CPU en procesar sus registros (cuando están en el búfer)
• La localización de datos en disco es un cuello de botella importante en las aplicaciones de BD
DISCO
una pista bloques
MEMORIA
Búfer
registros
El bloque es la unidad de transferencia entre disco y memoriay entre memoria y disco
8© A. Jaime 2005 DBD Tema 6
Tiempo de acceso a los datos del disco
• Tiempo de búsqueda (tb)– Para colocar la cabeza sobre la pista (mecánico)– Depende de la distancia a recorrer– Es el principal retardo: 10-14 mseg en PCs y 8-9
mseg en servidores• Retardo rotacional (rr) (o latencia)
– Esperar a que el principio del bloque pase bajo la cabeza
– Caso mejor: acceso inmediato– Caso peor: una vuelta entera– Principal retardo en discos de cabeza fija
• Tiempo de transferencia de bloque (ttb)– Depende del tamaño del bloque, de las pistas y rpm– Suele costar 1-2 ms/bloque
• Ejemplos:– Tiempo medio para encontrar y transferir 1 bloque:
(tb + rr +ttb) mseg → entre 12 – 60 mseg.– Al transferir varios bloques del mismo cilindro se
reduce el tiempo: • k bloques no contiguos del mismo cilindro:
tb + k * (rr + ttb ) mseg.• k bloques contiguos del mismo cilindro:
tb + rr + k * ttb mseg.
• Las organizaciones de ficheros tratan de minimizar el nº de transferencias de disco a memoria
9© A. Jaime 2005 DBD Tema 6
Tecnología RAID
• Originalmente: Redundant Arrays of Inexpensive Disks• Posteriormente “I” = Independent
• Capacidad de RAM: se cuadruplica cada 2 o 3 años• Mejoras en disco:
– Tiempo de acceso: <10% anual– Transferencia : ≈20% anual– Capacidad: >50% anual
• Solución natural: – Array (grande) de discos pequeños e independientes– Que funcione como un solo disco lógico– De mayor rendimiento
• Franjeo de datos (Data striping): – Uso de paralelismo para mejora del rendimiento
(una operación en cada disco al mismo tiempo)– Datos distribuidos en varios discos de forma
transparente– Aparentemente es un solo disco, grande y rápido– También puede mejorar la fiabilidad almacenando
información redundante
Magnitudes muy inferiores
FicheroA A4A3A2A1
Franjeode datos
Disco 0 Disco 1 Disco 2 Disco 3
Los 4 discos se ven como un disco grande
10© A. Jaime 2005 DBD Tema 6
Cómo mejorar la fiabilidad en RAID
• La probabilidad de error en banco de n discos es nveces mayor que para un disco
• Hay n impulsores de cabeza y no solo uno (es más probable que se produzca un error mecánico)
• Tiempo medio de fallo = 200.000 horas = 22,8 años• En banco de 100 discos = 2.000 horas = 83.3 días !
• Una sola copia en un banco de discos: poco fiable
• Solución obvia: redundancia de datos• Desventajas:
– Espacio de disco extra– Operaciones E/S extra– Computación extra para:
• Mantener coherente los datos redundantes• Recuperación ante fallos
11© A. Jaime 2005 DBD Tema 6
Cómo mejorar la fiabilidad en RAID (2)
Dos técnicas para introducir redundancia:
1. Reflejo o sombra (Mirroring o shadowing):– Mantener 2 discos con idénticos datos– Lectura: sobre el disco con menor retardo de
cola, búsqueda y rotacional– Si un disco se estropea se usa el otro hasta su
reparación– Gestiona el doble de lecturas en el mismo
tiempo que un disco normal (una lectura en cada disco)
– La velocidad de transferencia es la misma que con un único disco.
2. Guardar información de control extra:– Para reconstruir la información perdida en caso
de fallos
12© A. Jaime 2005 DBD Tema 6
Cómo mejorar la fiabilidad en RAID (3)
La introducción de redundancia debe considerar dos problemas:
1. Elegir una técnica que calcule la información redundante.– Propuestas (códigos de corrección de errores):
• Bits de paridad• Códigos de Hamming
– Con bits de paridad: un disco contiene la suma de todos los demás.Reconstrucción: proceso similar a una resta
2. Elegir un método de distribución de información redundante en el array de discos.– Propuestas:
• Almacenar la información redundante en un nº pequeño de discos
• Distribuirla uniformemente entre los discos
13© A. Jaime 2005 DBD Tema 6
Mejora del rendimiento con RAID
• Franjeo de datos en el nivel de bit:– Cada bit de 1 byte se guarda en 1 disco distinto– Para bytes de 8 bits podemos tener 8 discos– Los 8 discos participan en toda operación de E/S– La cantidad de datos leídos en cada solicitud es
como mucho 8 veces mayor.– Se puede generalizar la división a un múltiplo o
divisor de 8 (ejemplo: array de 4 discos)
• Franjeo de datos en el nivel de bloque:– Puede dar servicio a la vez a varias solicitudes de
E/S sobre discos diferentes– Baja el tiempo de espera en cola– Puede servir en paralelo a 1 petición que implique
varios bloques (si están en distintos discos)– A mayor nº de discos mejor es la respuesta
FicheroA A4A3A2A1
Franjeode datos
en el nivelde bloque
Disco 0 Disco 1 Disco 2 Disco 3
Los 4 discos se ven como un disco grande
14© A. Jaime 2005 DBD Tema 6
Organizaciones RAID y niveles
• Se diferencian 7 niveles numerados del 0 al 6
• La diferencia se basa en distintas combinaciones de:
– Granularidad de intercalado de datos (franjeo)
– Patrones usados para calcular la información redundante (bits de paridad, códigos de Hamming, de Reed-Solomon)
15© A. Jaime 2005 DBD Tema 6
Técnica del doble búfer
• Procesador de E/S (controlador de disco):– Independiente de la CPU (en paralelo)– Transfiere datos entre disco y memoria
• Mediante la técnica del doble búfer: – La CPU procesa el bloque del búfer– Mientras, el procesador de E/S transfiere otro
bloque desde el disco a otro búfer
tiempo
Bloque dedisco: E/S
Bloque dedisco: PROCE-
SAMIENTO
illenar A
i+1llenar B
i+2llenar A
iproc. A
i+1proc. B
i+2proc. A
Fig. 5.6 Empleo de dos búferes (A y B) para leer del disco
16© A. Jaime 2005 DBD Tema 6
Tipos de registro
• Los datos se almacenan en registros• Un registro es un conjunto de valores llamados campos• Cada campo es de un tipo de datos (entero, string,
boolean, fecha, etc.)
• Ejemplo: Tipo de registro EMPLEADO con campos
NOMBRE: String(1..30)SALARIO: Integer, …
• Un campo puede contener objetos binarios grandes como imágenes, video, audio o texto libre (tipo BLOB)
• Se guardan aparte y en el campo contiene el apuntador al BLOB
• Los lenguajes de programación (Ada, C, …) permiten definir registros (record, struct,…)
17© A. Jaime 2005 DBD Tema 6
Registros: longitud fija o variable
• Fichero: secuencia de registros• Un registro tendrá longitud variable porque existe:
– Campo de tamaño variable– Campo repetitivo– Campos opcionales– Registros de diferentes tipos en el mismo fichero
Fig. 5.7 a. Registro de longitud fija con 3 campos y 60 bytes
NOMBRE NSS DPTO
... ...1 31 40 60
NOMBRE NSS DPTO
Fig. 5.7 b. Registro con 2 campos de longitud fija (NSS y DPTO) y 2 de longitud variable(NOMBRE y SALARIO)
SALARIO
Carácter separador Carácter separador
NOMBRE=Juan Sánchez NSS=113 DPTO=LSI
Fig. 5.7c. Registro con campos de longitud variable y varios tipos de carácter separador
Separadorfin campo
Separadorfin registro
Separadorfin campo
Separadornombre-valor
Separadornombre-valor
Separadornombre-valor
18© A. Jaime 2005 DBD Tema 6
Factor de bloques
• Bloque: unidad de transferencia de datos entre disco y memoria
• Programas: trabajan con registros ⇒ situar los registros en bloques⇒ 1 bloque puede contener varios registros
• Factor de bloques: registros que entran en 1 bloque
B - (fbl * R) bytes
fbl = ⎣(B/R)⎦ registros por bloquedonde: B= nº bytes por bloque
R= nº bytes por registro (tamaño fijo)
• Puede quedar espacio desocupado en los bloques:
DISCO
una pista bloques
MEMORIA
Búfer 1
Búfer 2
Sólo entran 3 registros en el bloque. ¿fbl?
Sólo entran 2 registros en el bloque. ¿fbl?
Todos los bloques de un mismo disco son del mismo tamaño
19© A. Jaime 2005 DBD Tema 6
Organizaciones extendida y no extendida
• Organización extendida:– Aprovecha los espacios desocupados en los bloques– Parte de un registro está en un bloque y el resto en
otro– Un apuntador al final del bloque apunta al bloque
donde continúa el registro– Es preciso usarla si el registro es mayor que el
bloque
• Organización NO extendida:– los registros no se parten en distintos bloques– El proceso de los registros es más simple
Registro 1 Registro 2 Registro 3Registro 4
Registro 4 (cont) Registro 6
Bloquei
Bloquei+1 Registro 5
Registro 1 Registro 2 Registro 3
Registro 4 Registro 5
Bloquei
Bloquei+1
20© A. Jaime 2005 DBD Tema 6
Técnicas de asignación de los bloques de un fichero en disco
• Contigua: bloques consecutivos de disco. Facilita el doble búfer y dificulta el expandir el fichero
• Enlazada: cada bloque tiene un apuntador al siguiente bloque. Facilita la expansión y dificulta la lectura
• Grupos de bloques: combinación de las anteriores, un grupo de bloques consecutivos enlazado con el siguiente grupo consecutivo
• Indexada: bloques que contienen sólo índices. Los índices son apuntadores a los bloques que realmente contienen los datos
21© A. Jaime 2005 DBD Tema 6
Descriptor o cabecera de un fichero
• Información sobre el fichero, necesaria para los programas que lo usan:– Direcciones en disco de los bloques del
fichero– Descripciones de formato de los registros como:
• Longitud y orden de campos en registros de longitud fija
• Códigos de tipo de campo, separadores, códigos de tipo de registro, en registros de longitud variable
• Se encuentra en bloques de disco asociados al fichero
22© A. Jaime 2005 DBD Tema 6
Operaciones con ficheros
– Varían de unos sistemas a otros.– Abrir:
• Prepara el fichero para leer y asigna los búferes adecuados
• Recupera el descriptor y pone el puntero de lectura al comienzo (primer registro)
– Volver al principio:• Pone el puntero de lectura al comienzo (primer
registro)– Buscar:
• Busca el siguiente registro que cumple la condición.• Transfiere el bloque al búfer (si no estaba ya)• Localiza el registro y lo convierte en registro actual.
– Leer:• Copia el registro actual del búfer en una variable del
programa de usuario y avanza el puntero de lectura al siguiente registro.
– Eliminar: • Elimina el registro actual• Actualiza el registro en el disco
Caso simple: reescribiendo en disco el bloque donde está el
registro
23© A. Jaime 2005 DBD Tema 6
Operaciones con ficheros (2)
– Modificar: • Modifica valores en el registro actual• Actualiza el registro en el disco
– Insertar:• Localiza el bloque donde insertar • Transfiere el bloque al búfer • Escribe el registro nuevo en el búfer• Escribe el búfer en el disco
– Cerrar: • Libera los búferes• Realiza operaciones de limpieza
24© A. Jaime 2005 DBD Tema 6
Organización y método de acceso
• Organización del fichero: – Cómo se colocan los
registros y bloques– Cómo interconectan
• Método de acceso:– Programas que permiten
realizar ciertas operaciones sobre el fichero
• Es posible aplicar varios métodos de acceso a una misma organización de fichero
• Hay métodos de acceso que NO se pueden aplicar a algunas organizaciones de fichero
• Interesa encontrar la organización idónea en cada caso• Será la que permita realizar de manera más eficiente
las operaciones más frecuentes
• En muchos casos ninguna organización permite que todas esas operaciones se implementen eficientemente.
• Entonces se elige una solución de compromiso entre la importancia de lo que se espera y la mezcla de operaciones de recuperación y actualización
•de montón, •ordenado,•de direccionamientocalculado,
•indexado (primario, de agrupación, secundario)
•recorrer en secuencia, •localizar uno concreto, •buscar los que cumplanuna condición, ...
25© A. Jaime 2005 DBD Tema 6
Ficheros de montón
• Ficheros de registros NO ordenados (secuenciales)• Organización más simple:
– Registros en el orden en el que se insertan– Inserciones siempre al final del fichero
• Inserción– Poner en el búfer el último bloque del fichero– Añadir al búfer el registro a insertar– Reescribir el búfer en el disco– Guardar la dirección del bloque en el descriptor
• Búsqueda– Lineal: bloque a bloque hasta que un registro
cumpla la condición (costoso)– Costo medio: acceso a b/2 bloques – Costo caso peor: b b = nº de bloques
del ficheroNingún registro cumple
la condición Hay que obtener todos los que la cumplen
26© A. Jaime 2005 DBD Tema 6
Eliminación en ficheros de montón
• Eliminación– Buscar el registro a borrar– Transferir el bloque al búfer – Eliminar el registro del búfer – Reescribir el búfer en el disco
– Problema: deja espacios desocupados en el disco (pueden ser muchos, si se borran muchos registros)
– Otra técnica: usar un bit del registro como marcador de eliminación y usar sólo los NO borrados
– Solución 1: reorganización periódica del fichero (para recuperar el espacio desocupado)
• Recorrer secuencialmente los bloques• Recolocar los registros quitando los huecos
– Solución 2: intentar insertar sobre huecos y si no se puede insertar al final
• Cálculos adicionales para encontrar bloques con huecos
27© A. Jaime 2005 DBD Tema 6
Modificación en ficheros de montón
• Modificación– Buscar el registro a modificar– Transferir el bloque al búfer – Modificar el registro en el búfer – Reescribir el búfer en el disco
– Problema: registros de tamaño variable
– Solución: • Eliminar el registro a modificar• Insertar el registro modificado
28© A. Jaime 2005 DBD Tema 6
Caso especial de ficheros de montón:ficheros relativos o directos
• Con registros de longitud fija• NO ordenados• Bloques NO extendidos y de asignación continua
• En este caso es muy sencillo tener acceso a cualquier registro por la posición que ocupa en el fichero:– Los registros se numeran como 0, 1, 2, 3, ..., r-1– Los registros en cada bloque se numeran como
0, 1, ..., fbl-1
• Así el registro i-ésimo estará en:– Bloque ⎣(i/fbl)⎦– Registro (i mod fbl) del bloque (mod es el
resto de la división)
• Esta idea no ayuda a localizar un registro según una condición de búsqueda
29© A. Jaime 2005 DBD Tema 6
Ficheros ordenados
• Secuencial o secuencial ordenado• Registros se mantienen físicamente ordenados según
los valores de un campo: el campo de ordenación• Si el campo de ordenación es clave, se llama clave de
ordenación
Aaron, EdAbbott, Diane
Acosta, Marc
Adams, JohnAdams, Robin
Akers, Jan
Wright, PamWyatt, Charles
Zimmer, Byron
NOMBRE NSS F_NCTO SALARIO SEXO
...
Bloque 1
Bloque 2
Bloque n
......
...
Fig. 5.9 Bloques de un fichero ordenado (secuencial) de registrosEMPLEADO con NOMBRE como campo clave de ordenación
NO se trata de un fichero de montón recién ordenado
30© A. Jaime 2005 DBD Tema 6
Ficheros ordenados: ventajas
• Lectura eficiente en orden del campo de ordenación• Acceso eficiente al siguiente en el orden del campo
de ordenación:– Estará en el búfer (si quedan registros por leer)– Si no, trae el siguiente bloque (si hay)
• Posibilidad de búsqueda binaria:– Mucho más rápida– Sólo si la condición de búsqueda se basa en un
valor del campo clave de ordenación
Búsqueda binaria (dicotómica)• Se efectúa sobre bloques• Ejemplo: bloques 1, 2, …, b• Las direcciones de 1, 2, ..., b, están en el descriptor• Se desea encontrar un registro con valor K en su
campo clave de ordenación• Costo medio: acceso a log2(b) bloques• Costo medio con búsqueda lineal: b/2 (b si no está)
• También se puede buscar por <, >, <=, >= sobre el campo de ordenación.
• Estos ficheros NO ofrecen ventajas para búsquedas por campos distintos al de ordenación
31© A. Jaime 2005 DBD Tema 6
Ficheros ordenados: operaciones
• Se debe mantener el orden de los registros• Inserción y eliminación: operaciones costosas
Inserción• Buscar el bloque donde insertar en orden el campo
de ordenación• Abrir espacio, desplazando el resto de registros del
fichero• Media: lectura y reescritura de b/2 bloques !!• Insertar el nuevo registro y reescribir el bloque• Alternativas:
– Bloques con espacio desocupado: cuando se llena tenemos el mismo problema
– Fichero de desbordamiento:• NO está ordenado• Los nuevos registros se insertan al final• Periódicamente: reconstruir el fichero
ordenado, colocando en su posición los registros del fichero de desbordamiento
• Inserción más eficiente• Búsqueda más ineficiente
32© A. Jaime 2005 DBD Tema 6
Ficheros ordenados: operaciones (2)
Eliminación• Similar a la inserción para la eliminación física• Más sencillo si sólo se marca como borrado y se
reorganiza periódicamente
Modificación• Según el caso podrá realizarse búsqueda binaria• Si se modifica el campo de ordenación puede
precisar cambiar de posición el registro. Eso supone hacer una eliminación y una inserción
• Si los registros son de longitud fija se podráreescribir el bloque en la misma posición
Uso de ficheros ordenados en BD• Estos ficheros se usan poco en aplicaciones de BD• Se usan más con un índice primario: ficheros
secuenciales indexados
33© A. Jaime 2005 DBD Tema 6
Técnicas de direccionamiento calculado (hashing)
• Acceso muy rápido para ciertas búsquedas
• Los ficheros de direccionamiento calculado se llaman también ficheros dispersos o directos– Condición de búsqueda: igualdad sobre el campo
de direccionamiento calculado (c.dir.cal.)– El c.dir.cal. en la mayor parte de los casos es clave
(valores únicos)– Función de direccionamiento calculado o de
aleatorización (f. hash)• Se aplica a valores del c.dir.cal. del registro• Resultado: dirección de un bloque de disco• En el bloque está el reg. con ese valor de
c.dir.cal.• El registro se busca en el búfer• Suele bastar con un acceso a bloques de disco
• Direccionamiento calculado interno: – Estructura de datos (en memoria principal) muy útil
en programación– A continuación se hace un paréntesis para repasar
esta estructura de datos (no se trata de ficheros)– Los ficheros de direccionamiento calculado de los
que se hablaba en esta página los estudiamos después como direccionamiento calculado externo
34© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado interno
• Array de 0..M-1 registros• Elegir función de direccionamiento calculado:
h(k)= k mod M• k real: conversión previa a entero• k string: conversión a entero usando los códigos
• Técnicas para las funciones de direccionamiento calculado:– Plegado (folding): operación aritmética (ej. suma)
ó lógica (ej. O exclusiva) en partes del c.dir.cal. para calcular la dirección
– Escoger dígitos
• Problemas con la mayoría de funciones de direccionamiento calculado:– No garantiza direcciones distintas a claves
distintas– Espacio c.dir.cal. >> 0 . . M-1– Colisión: la dirección obtenida ya está ocupada– Búsqueda de otra dirección: resolución de
colisiones
NOMBRE NSS SALARIO
...
012
M-1
k valor de campo dir.cal.
35© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado interno (2)Métodos para resolución de colisiones
• Direccionamiento abierto: búsqueda uno a uno en las direcciones siguientes a la devuelta por la función de direccionamiento calculado hasta encontrar un hueco libre
• Encadenamiento:– Con áreas de desbordamiento– Registros con un apuntador (campo nuevo)– Registros de igual dirección: encadenados
0123
m-1m
m+1m+2
-1-1-1m
m+1-1
m+2-1-1
m-2
NOM NSS FNAC SALARIOSEXO
Campos de datos
...
m+k-1 -1
...
Espaciode
direcciones
Espaciode
desborda-miento
Apuntadordesbordamiento
Fig. 5.10 (b) Resolución de colisiones por encadenamiento
Apunta al siguienteregistro de la lista enlazada.-1 = puntero a nulo
• Direccionamiento calculado múltiple:– 2ª función de direccionamiento calculado en caso
de colisión– Caso de una 2ª colisión: uso de 3ª función– Al final se usa direccionamiento abierto
36© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado interno (3)
• Buscar, insertar y eliminar:– Encadenamiento: algoritmos más simples– Direccionamiento abierto: eliminación
complicada
• Objetivo de una buena función de direcciona-miento calculado:– Distribuir uniformemente– Mínimo de colisiones– Máxima ocupación de posiciones en el array
• Resultado de simulaciones y análisis:– Mejor 70%-90% de ocupación:
• Número bajo de colisiones• Poco espacio desperdiciado
– Funciones con mod:• Mejor distribución si M es primo
– Algunas funciones:
• Conviene que M=2k
37© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado externo
• En ficheros de disco• Proporciona el acceso más rápido a un registro
concreto (por c.dir.cal.): en general un acceso a bloque• Dirección: nº relativo de cubeta• Una cubeta consta de 1 o varios bloques contiguos• Tabla en descriptor: convierte el nº relativo de cubeta
en dirección de bloque en disco
0
1
2
M-1
...
Nº relativode cubeta Dirección de bloque en disco
Tabla contenida en el descriptordel fichero de direccionamiento
calculado
Fig. 5.11 Correspondencia entre número de cubeta y dirección de bloque en disco
38© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado externo (2)
• Colisiones: sin problema hasta llenar cubeta• Cubeta llena: lista enlazada de cubetas de desborde• Punteros: dirección de bloque + nº de registro en el
bloque
340460
Cubeta 0
Cubetasprincipales
Cubetas de desbordamiento
580
321761
nulo91
...
39989
Cubeta M-1
630
981
182
nulo
652 nulo
...
Puntero aregistro
Punterosa registro
0
1
M-1
...
Nº de cubeta
Direcciónde bloque en disco
Puntero aregistro
Puntero aregistro
DatosDatos DatosDatos
Cubeta 1
En descriptor
Fig. 5.12 Manejo de desbordamiento de cubeta por encadenamiento
39© A. Jaime 2005 DBD Tema 6
Problemas y operaciones en direccionamiento calculado externo
• Problemas:– Las funciones de direccionamiento calculado, en
general, NO preservan el orden de la clave – Cantidad de espacio prefijada:
• M cubetas * m registros/cubeta• Si nº reg. mucho menor: desperdicio de espacio• Si es bastante mayor:
– Muchas colisiones– Listas de cubetas de desbordamiento largas
• En ambos casos es preferible:– Cambiar el espacio asignado– Cambiar la función de dir. calculado– Recolocar los registros
• Operaciones:– Búsqueda:
• Por campo ≠ c.dir.cal. es tan costoso como en fichero no ordenado
– Eliminación:• Cubeta: pasar un registro del área de
desbordamiento• Área de desbordamiento: eliminación en lista
enlazada– Modificación:
• C.dir.cal: eliminar e insertar• Otro campo: reescritura
40© A. Jaime 2005 DBD Tema 6
Direccionamiento calculado con expansión dinámica
• El fichero crece según se necesita más espacio• Soluciona el problema de espacio de direcciones fijo• Dirección: se usa en forma de número binario• Distribución: según bits de mayor peso
• Direccionamiento calculado extensible:– Mediante listas
• Direccionamiento calculado lineal:– No precisa estructura de datos
(no los vamos a estudiar)
41© A. Jaime 2005 DBD Tema 6
Ficheros de registros mixtos
• Hasta aquí: ficheros con todos sus registros del mismo tipo
• Campos de conexión:– Para representar relaciones (vínculos): claves
extranjeras en el modelo relacional y referencias a objeto en el modelo orientado a objetos (OO)
– Constituyen referencias lógicas de campos entre registros de ficheros distintos
• Modelos OO, jerárquico y en red:– Relaciones físicas: registros físicamente contiguos
o mediante punteros– Suelen asignar un área de disco que almacena
registros de distintos tipos, que pueden estar agrupados físicamente
• Fichero mixto (registros de varios tipos):– En OO contiene agrupados físicamente objetos
relacionados – Con un campo para almacenar el tipo de registro– El SGBD una vez determinado el tipo de registro
utiliza el catálogo para conocer los campos del registro y sus tamaños
42© A. Jaime 2005 DBD Tema 6
Índices
• Estructuras de acceso que aceleran la obtención de registros (para ciertas condiciones de búsqueda)
• La mayoría de SGBD implementan sus índices con árboles B+. Estudiaremos exclusivamente estos índices
• Se distinguen cuatro tipos de índice:– Índices secundarios sobre clave– Índices secundarios sobre no clave– Índices primarios (sobre clave)– Índices de agrupación (sobre no clave)
• Los índices secundarios (o caminos de accesosecundario) admiten cualquier organización primaria
• Los índices primarios y los de agrupación exigen que la organización primaria sea fichero ordenado(por el campo o campos de indexación)
• Un fichero puede tener varios índices pero sólo puede tener uno primario o uno de agrupación. El resto serán secundarios.
• Se puede construir un índice sobre cualquier:– Campo del fichero– Conjunto de campos del fichero
• También se distingue entre índices:– Físicos (con punteros)– Lógicos (con valores de clave primaria)
– Índice compuesto– Direccionamiento
partido– Ficheros rejilla
43© A. Jaime 2005 DBD Tema 6
Índice secundario sobre campo clavecon árbol B+
Buo1
Ang1
Buo2
Can1
Dal1
Deg1
Goy2
Goy1
Gri1
Man1
Pic1
Mun1
Rem1
Van1
Vel2
Vel1
Vin1
Vel3
War1
Vin2
Buo1 Can1 Deg1 Man1 Pic1 Vel2 Vin1
Goy2 Van1
Fich
ero
de D
ATO
SÍN
DIC
E so
bre
el c
ampo
ID(c
on á
rbol
B+ )
Bloque nº:
Gio
cond
a
Gira
sole
s
Mar
ilyn
Aqu
elar
re
Gue
rnic
a
Lanz
asM
aja
desn
uda
Gui
tarr
a
El fl
autis
ta
Cre
ació
n A
dán
Últi
ma
cena
Juic
io fi
nal
Men
inas
El g
rito
Pers
. mem
oria
Ron
da n
oche
Hila
nder
as16
44V
eláz
quez
Bar
roco
222x
293
Cab
aret
Anu
ncia
ción
Pz. S
. Mar
co
1656
Vel
ázqu
ez
1506
Da
Vin
ci16
42R
embr
andt
1937
Pica
sso
1510
Buo
narr
oti
1924
Dal
í18
93M
unch
1889
Van
Goh
g19
64W
arho
l
1800
1634
Vel
ázqu
ez
1823
Goy
aG
oya
1541
Buo
narr
oti
1497
Da
Vin
ci
1877
Deg
as19
13G
ris
1434
Ang
elic
o,F.
1866
Man
et17
50C
anal
etto
Bar
roco
318x
276
Ren
acim
ient
o07
7x05
3B
arro
co36
3x43
7
Cub
ism
o34
9x77
6R
enac
imie
nto
null
Surr
ealis
mo
024x
033
Exp
resi
onis
mo0
91x0
73
Impr
esio
nism
o09
5x07
3Po
p A
rt10
1x10
1
null
097x
190
Bar
roco
307x
367
Ren
acim
ient
o48
0x88
0nu
ll14
0x43
5
Cub
ism
o06
1x05
0R
enac
imie
nto
1370
x122
0
Gót
ico
175x
080
Impr
esio
nism
o02
4x04
4
Impr
esio
nism
o16
1x09
7B
arro
co06
8x11
2
Vel2
Vel1
Vin1
Rem1
Pic1
Buo1
Dal1
Mun1
Van1
War1
Vel3
Goy2
Goy1
Buo2
Vin2
Deg1
Gri1
Ang1
Man1
Can1
Títu
loA
ñoPi
ntor
Est
iloT
amañ
oID
1 2 76543
44© A. Jaime 2005 DBD Tema 6
Índice secundario sobre campo clavecon árbol B+ (2)
• Índice secundario sobre campo(s) clave (IS-c):– En el ejemplo se ha definido sobre ID– Hojas: una entrada por cada registro del fichero de
datos. Cada una tiene un valor de ID y un puntero al registro con ese valor. Las entradas están ordenadas en las hojas. Las hojas están enlazadas y se pueden recorrer de izda a dcha.
• Fichero de datos: Puede tener cualquier organización primaria (montón, ordenado, dir. calculado, etc). Por tanto, pueden definirse varios IS-c sobre el un fichero
• Ordenamiento lógico: el IS-c permite leer los registros del fichero en orden ascendente de los valores de ID. Esa lectura puede suponer muchas transferencias de bloque (caso peor: tantas como registros)
• Búsqueda del registro con ID= “Mun1”: se parte de la raíz y se sigue su puntero central que lleva a los x tales que “Goy1”<x≤ “Van1”. En el nodo intermedio se sigue el puntero central, que lleva a los x que “Man1”<x ≤”Pic1”. En el nodo hoja se encuentra el valor buscado “Mun1” (si no estuviera, sería porque no existe). Se sigue el puntero del valor “Mun1” para obtener todos los campos del registro con ID=“Mun”
• Toda búsqueda recorre un nodo de cada nivel (una transferencia de bloque cada nodo) y transfiere el bloque del fichero de datos encontrado
• Inserción/eliminación de registros: supone actualizar y reorganizar el índice
45© A. Jaime 2005 DBD Tema 6
Terminología de árboles
A
B
E F
C D
G H I
K
Nodo raíz(nivel 0)
Nodos delnivel 1
Nodos delnivel 2
Nodos delnivel 3J
(Los nodos E, J, C, G, H y K son los nodos hoja del árbol)
SUBÁRBOL DEL NODO B
46© A. Jaime 2005 DBD Tema 6
Árboles B+
• Siempre equilibrado• Conlleva un desperdicio de espacio aceptable• Inserción y eliminación de cierta complejidad• Los nodos internos y las hojas son diferentes.
• En nodos internos sólo apuntadores a otros nodos:
– En un nodo los Ki ordenados: K1<K2< . . . <Kq-1– Todos los nodos internos tienen el mismo tamaño:
entran p punteros y p-1 valores Ki como mucho– Como mínimo debe haber ⎡p/2⎤ punteros en cada
nodo. La raíz tendrá como mínimo 2 punteros (cuando es nodo interno, ya que podría ser hoja)
– Cada Ki del nodo estará repetido en el subárbol situado a su izquierda (en general será el mayor valor accesible en el subárbol al que apunta)
P1 ... Pi ... Pq
X XX
X≤K1 Ki-1<X≤Ki Kq-1<X
punteroa árbol
punteroa árbol
punteroa árbol
K1 KiKi-1 Kq-1
47© A. Jaime 2005 DBD Tema 6
Árboles B+ (2)
• En nodos hoja sólo apuntadores a bloques de datos:
– En una hoja los Ki ordenados: K1<K2< . . . <Kq-1– Todos los nodos hoja tienen el mismo tamaño:
entran p punteros y p valores Ki como mucho– Cada puntero Pri apunta a un registro de clave Ki
(o al bloque que lo contiene, o al bloque de punteros en el que hay punteros que llevan a registros con Ki )
– Como mínimo debe haber ⎡p/2⎤ punteros (y valores) en cada nodo.
– Todas las hojas estarán en el mismo nivel– Las hojas están enlazadas entre sí: permiten
recorrer los registros en orden ascendente del campo de indexación
– Algunos valores de las hojas aparecen repetidos en nodos internos
– En algunos índices se incluyen punteros a la hoja anterior (recorridos en orden descendente)
• Si el campo de indexación no es clave: nivel extra de indirección (a bloques de punteros)
Pr1 Pr2 Pri Prq-1... ... Psiguiente
punteroa datos
punteroa datos
punteroa datos
punteroa datos
Puntero al siguientenodo hoja del árbol B+
K1 K2 Ki Kq-1
48© A. Jaime 2005 DBD Tema 6
Ejemplo con árboles B+
• Nodo: V=9 bytes, Pr = 7 bytes, P = 6 bytes• B=512 bytes/bloque
• ¿Máximo de punteros (p) a árbol (nodo interno)?: p*P+(p-1)*V≤B → 15p ≤521
• ¿Máximo de punteros (phoja) a dato (nodo hoja)?:phoja*(Pr+V)+P≤B → 16 phoja≤506
• Puede precisar información adicional por nodo:– tipo de nodo (interno/hoja)– q: nº de entradas– puntero al nodo padre y hermanos
Campo deindexación
Punteroa datos
Punteroa nodo
p=34
phoja=31
P1 ... Pi ... Pq
X XX
X≤K1 Ki-1<X≤Ki Kq-1<X
punteroa árbol
punteroa árbol
punteroa árbol
K1 KiKi-1 Kq-1
Pr1 Pr2 Pri Prq-1... ... Psiguiente
punteroa datos
punteroa datos
punteroa datos
punteroa datos
K1 K2 Ki Kq-1
49© A. Jaime 2005 DBD Tema 6
Ejemplo con árboles B+(2)
• Ocupación nodos: 69%• Promedio:
– p*0,69=23 punteros a nodo (y 22 valores) por cada nodo interno
– phoja*0,69=21 punteros por hoja
• Raíz: 1 nodo, 22 valores, 23 punteros• Nivel 1: 23 nodos, 506 valores, 529 punteros• Nivel 2: 529 “, 11.638 “, 12.167 “• Hojas: 12.168 “, 255.507 “, 255.507 “ registros
• Algoritmos de búsqueda e inserción (pg. 168): ver los ejemplos de las 3 páginas siguientes
• Todo valor del árbol existe en alguna hoja• Todo valor de nodo interno es un valor extremo derecho
del subárbol situado a su izquierda
p=34
phoja=31
50© A. Jaime 2005 DBD Tema 6
Árbol B+: inserciones
0
a árbol nuloa datos
a nodoApuntadores: Insertar 1: desborde
(nuevo nivel)5 0 8 0
Insertar 78 0
5
1 0 5 0
Insertar 3: desborde(división)
7 0
5
1 0 5 0 8 0
Insertar 12: desborde(división y se propaga
nuevo nivel)
7 0
3 5
5 0 8 01 0 3 0
7 0
3
5 0 8 01 0 3 0 12 0
8
5
Insertar 9
51© A. Jaime 2005 DBD Tema 6
Árbol B+: inserciones (2)
0
a árbol nuloa datos
a nodoApuntadores:
7 0
3
5 0 8 01 0 3 0 9 0
8
5
Insertar 6: desborde(división y se propaga)
12 0
8 0
3
5 01 0 3 0 9 0
7 8
5
12 06 0 7 0
52© A. Jaime 2005 DBD Tema 6
Árbol B+: eliminaciones
8 0
1 6
5 01 0 6 0 12 0
9
7
9 07 0
Eliminar 5
8 0
1 6
6 01 0 12 0
9
7
9 07 0
Eliminar 12: Insuficiencia(redistribuir)
8 0
1 6
6 01 0 9 0
8
7
7 0
Eliminar 9: insuficiencia (mezclar con izquierdo, persiste lainsuficiencia, reducción de niveles)
1 6
6 01 0 7 0 8 0
53© A. Jaime 2005 DBD Tema 6
Variaciones de B+
• Árboles B y B+: nodos ocupados al menos hasta la mitad
• Árbol B*: nodos ocupados al menos 2/3
• Algunos sistemas permiten:– Elegir el factor de llenado: entre 0,5 . . 1,0– Indicar un factor distinto para hojas y nodos
internos para los árboles B+
• Investigaciones sugieren – Reducir el % de ocupación– Permitir que el nodo se vacíe totalmente antes de
fusionar:• Simplifica la eliminación• Por simulaciones se sabe que esto no
desperdicia demasiado espacio cuando lasinserciones y borrados se distribuyen aleatoriamente
54© A. Jaime 2005 DBD Tema 6
Índice secundario sobre campo NO clavecon árbol B+
Buo
narr
oti
Ang
élic
o,F.
Can
alet
toD
alí
Da
Vin
ciD
egas
Gris
Goy
a
Man
etM
unch
Rem
bran
dtPi
cass
o
Van
Goh
gV
elaz
quez
War
hol
Buonarr.. Dalí Degas Munch Rembr.. Velazq..
Gris
Fich
ero
de D
ATO
SÍN
DIC
E so
bre
el c
ampo
Pin
tor
(con
árb
ol B
+ )
Bloque nº:
Gio
cond
a
Gira
sole
s
Mar
ilyn
Aqu
elar
re
Gue
rnic
a
Lanz
asM
aja
desn
uda
Gui
tarr
a
El fl
autis
ta
Cre
ació
n A
dán
Últi
ma
cena
Juic
io fi
nal
Men
inas
El g
rito
Pers
. mem
oria
Ron
da n
oche
Hila
nder
as16
44V
eláz
quez
Bar
roco
222x
293
Cab
aret
Anu
ncia
ción
Pz. S
. Mar
co
1656
Vel
ázqu
ez
1506
Da
Vin
ci16
42R
embr
andt
1937
Pica
sso
1510
Buo
narr
oti
1924
Dal
í18
93M
unch
1889
Van
Goh
g
1964
War
hol
1800
1634
Vel
ázqu
ez
1823
Goy
aG
oya
1541
Buo
narr
oti
1497
Da
Vin
ci
1877
Deg
as19
13G
ris
1434
Ang
elic
o,F.
1866
Man
et17
50C
anal
etto
Bar
roco
318x
276
Ren
acim
ient
o07
7x05
3B
arro
co36
3x43
7
Cub
ism
o34
9x77
6R
enac
imie
nto
null
Surr
ealis
mo
024x
033
Expr
esio
nism
o09
1x07
3
Impr
esio
nism
o09
5x07
3Po
p A
rt10
1x10
1
null
097x
190
Bar
roco
307x
367
Ren
acim
ient
o48
0x88
0nu
ll14
0x43
5
Cub
ism
o06
1x05
0R
enac
imie
nto
1370
x122
0
Gót
ico
175x
080
Impr
esio
nism
o02
4x04
4
Impr
esio
nism
o16
1x09
7B
arro
co06
8x11
2
Vel2
Vel1
Vin1
Rem1
Pic1
Buo1
Dal1
Mun1
Van1
War1
Vel3
Goy2
Goy1
Buo2
Vin2
Deg1
Gri1
Ang1
Man1
Can1
Títu
loA
ñoPi
ntor
Est
iloT
amañ
oID
1 2 76543
Blo
ques
de
apun
tado
res
a re
gist
ro
55© A. Jaime 2005 DBD Tema 6
Índice secundario sobre campo NO clavecon árbol B+ (2)
• Índice secundario sobre campo(s) no clave (IS-nc):– En el ejemplo se ha definido sobre el campo Pintor– La diferencia con IS-c es que las hojas pueden
apuntar a los varios registros idéntico valor de campo de indexación. Por eso incluye un nivel de indirección a bloques de punteros (existen otras alternativas a este nivel de indirección)
• Fichero de datos: En IS-c e IS-nc se puede tener cualquier organización primaria (montón, ordenado, dir. calculado, etc). Pueden definirse varios índices secundarios (IS-c ó IS-nc) sobre el mismo fichero
• Ordenamiento lógico: o poder leer los registros en orden del campo(s) de indexación. Sólo para índices secundarios (los primarios y de agrupación tienen otra opción mejor)
• Búsqueda de un registro: igual que IS-c, salvo que aquí hay que visitar el nivel con bloques de punteros.
• Toda búsqueda visita un nodo de cada nivel, un bloque de punteros (o varios, si no caben todos los punteros en un bloque) y uno por cada bloque que tenga registros con el valor buscado (puede haber varios, ya que no es clave)
• Inserción/eliminación de registros: como con cualquier índice, supone actualizar y reorganizar el índice
56© A. Jaime 2005 DBD Tema 6
Índice primario con árbol B+
(campo clave primaria)
Buo1
Ang1
Buo2
Can1
Dal1
Deg1
Goy2
Goy1
Gri1
Man1
Pic1
Mun1
Rem1
Van1
Vel2
Vel1
Vin1
Vel3
War1
Vin2
Buo1 Can1 Deg1 Man1 Pic1 Vel2 Vin1
Goy2 Van1
Fich
ero
de D
ATO
S (o
rden
ado
por
clav
e pr
imar
ia)
ÍND
ICE
sobr
e cl
ave
prim
aria
(ID
)(c
on á
rbol
B+ )
Bloque nº:
Gira
sole
sM
enin
as
Ron
da n
oche
1656
Vel
ázqu
ez
1642
Rem
bran
dt18
89V
an G
ohg
Bar
roco
318x
276
Bar
roco
363x
437
Impr
esio
nism
o09
5x07
3Ve
l1
Rem1
Van1
Gio
cond
aLa
nzas
Hila
nder
as16
44V
eláz
quez
Bar
roco
222x
293
1506
Da
Vin
ci16
34V
eláz
quez
Ren
acim
ient
o07
7x05
3B
arro
co30
7x36
7Ve
l2
Vin1
Vel3
Mar
ilyn
Últi
ma
cena
1964
War
hol
1497
Da
Vin
ciPo
p A
rt10
1x10
1R
enac
imie
nto
480x
880
War1
Vin2
Aqu
elar
reM
aja
desn
uda
Gui
tarr
a
1800
1823
Goy
aG
oya
1913
Gris
null
097x
190
null
140x
435
Cub
ism
o06
1x05
0Go
y2Go
y1
Gri1
Cre
ació
n A
dán
Juic
io fi
nal
Anu
ncia
ción
1510
Buo
narr
oti
1541
Buo
narr
oti
1434
Ang
elic
o,F.
Ren
acim
ient
onu
llR
enac
imie
nto
1370
x122
0
Gót
ico
175x
080
Buo1
Buo2
Ang1
Gue
rnic
a
El fl
autis
taE
l gri
to19
37Pi
cass
o18
93M
unch
1866
Man
et
Cub
ism
o34
9x77
6E
xpre
sion
ism
o091
x073
Impr
esio
nism
o16
1x09
7
Pic1
Mun1
Man1
Pers
. mem
oria
Cab
aret
Pz. S
. Mar
co19
24D
alí
1877
Deg
as
1750
Can
alet
toSu
rrea
lism
o02
4x03
3Im
pres
ioni
smo
024x
044
Bar
roco
068x
112
Dal1
Deg1
Can1
Títu
loA
ñoPi
ntor
Est
iloT
amañ
oID
1 2 76543
57© A. Jaime 2005 DBD Tema 6
Índice primario con árbol B+ (2)(campo clave primaria)
• Índice primario (IP):– En el ejemplo se ha definido sobre la clave ID– Se puede construir igual que IS-c (hay otras
alternativas)• Fichero de datos: ordenado por campo de indexación
(ID). Por tanto sólo puede definirse un IP por fichero. Es incompatible con otras organizaciones primarias que exijan otra ordenación de los registros (dir. calculado, fich. ordenado por otro/s campo/s ...)
• Ordenamiento lógico: aquí no tiene sentido ya que los registros están ordenados físicamente
• Búsqueda de un registro: igual que en IS-c.• Toda búsqueda visita un nodo de cada nivel y el
bloque que tiene el registro con el valor buscado (único, ya que es clave)
• Permite buscar registros que cumplan por ejemplo ID>’Gri1’” o por ejemplo ’Goy1’≤ID≤‘Vel3’”
• Inserción/eliminación de registros: como con cualquier índice, supone actualizar y reorganizar el índice
58© A. Jaime 2005 DBD Tema 6
Índice de agrupación con árbol B+
(campo no clave)
Buo
narr
oti
Ang
élic
o,F.
Can
alet
toD
alí
Da
Vin
ciD
egas
Gris
Goy
a
Man
etM
unch
Rem
bran
dtPi
cass
o
Van
Goh
gV
elaz
quez
War
hol
Buonarr.. Dalí Degas Munch Rembr.. Velazq..
Gris
Fich
ero
de D
ATO
S(o
rden
ado
por
cam
po d
e ag
rupa
ción
)
Bloque nº:
Gio
cond
a
Gira
sole
s
Mar
ilyn
Aqu
elar
re
Gue
rnic
a
Lanz
as
Maj
a de
snud
a
Gui
tarr
aEl
flau
tista
Cre
ació
n A
dán
Últi
ma
cena
Juic
io fi
nal
Men
inas
El g
rito
Pers
. mem
oria
Ron
da n
oche
Hila
nder
as16
44V
eláz
quez
Bar
roco
222x
293
Cab
aret
Anu
ncia
ción
Pz. S
. Mar
co
1656
Vel
ázqu
ez
1506
Da
Vin
ci
1642
Rem
bran
dt19
37Pi
cass
o
1510
Buo
narr
oti
1924
Dal
í
1893
Mun
ch
1889
Van
Goh
g
1964
War
hol
1800
1634
Vel
ázqu
ez
1823
Goy
a
Goy
a
1541
Buo
narr
oti
1497
Da
Vin
ci18
77D
egas
1913
Gris
1434
Ang
elic
o,F.
1866
Man
et
1750
Can
alet
to
Bar
roco
318x
276
Ren
acim
ient
o07
7x05
3
Bar
roco
363x
437
Cub
ism
o34
9x77
6
Ren
acim
ient
onu
ll
Surr
ealis
mo
024x
033
Expr
esio
nism
o09
1x07
3
Impr
esio
nism
o09
5x07
3
Pop
Art
101x
101
null
097x
190
Bar
roco
307x
367
Ren
acim
ient
o48
0x88
0
null
140x
435
Cub
ism
o06
1x05
0
Ren
acim
ient
o13
70x1
220
Gót
ico
175x
080
Impr
esio
nism
o02
4x04
4
Impr
esio
nism
o16
1x09
7
Bar
roco
068x
112
Vel2
Vel1
Vin1
Rem1
Pic1
Buo1
Dal1
Mun1
Van1
War1
Vel3
Goy2
Goy1
Buo2
Vin2
Deg1
Gri1
Ang1
Man1
Can1
Títu
loA
ñoPi
ntor
Est
iloT
amañ
oID
1 2 76543
ÍND
ICE
sobr
e el
cam
po P
into
r(c
on á
rbol
B+ )
59© A. Jaime 2005 DBD Tema 6
Índice de agrupación con árbol B+ (2)(campo no clave)
• Índice de agrupación (IA):– En el ejemplo se ha definido sobre el campo Pintor– Se puede construir similar al IS-c, pero cada valor de
las hojas apunta al bloque de datos donde está el 1º registro con ese valor (puede haber varios registros con el mismo valor de Pintor, ya que no es clave)
• Fichero de datos: ordenado por campo de indexación(Pintor). Así, todos los registros del mismo Pintor están juntos. Por tanto sólo puede definirse un IA por fichero. Es incompatible con otras organizaciones primarias que exijan otra ordenación de los registros (IP, dir. calculado, f. ordenado por otro/s campo/s ...)
• Ordenamiento lógico: tampoco tiene sentido ya que los registros están ordenados físicamente
• Búsqueda de un registro: el primer registro con ese valor se busca igual que en IS-c. El resto de registros con el mismo valor están seguidos al 1º en el fichero de datos.
• Toda búsqueda visita un nodo de cada nivel y los bloques de datos que tienen registros con el valor buscado (pueden ser varios, ya que no es clave)
• Permite buscar registros que cumplan por ejemplo Pintor>’Gris’” o por ejemplo ’Goya’≤ID≤‘Velázquez’”
• Inserción/eliminación de registros: como con cualquier índice, supone actualizar y reorganizar el índice
60© A. Jaime 2005 DBD Tema 6
Compatibilidad
Buo
narr
oti
Ang
élic
o,F.
Can
alet
toD
alí
Da
Vin
ciD
egas
Gris
Goy
a
Man
etM
unch
Rem
bran
dtPi
cass
o
Van
Goh
gV
elaz
quez
War
hol
Buonarr.. Dalí Degas Munch Rembr.. Velazq..
Gris
Fich
ero
de D
ATO
S(o
rden
ado
el c
ampo
de
agru
paci
ón)
ÍND
ICE
de a
grup
ació
nso
bre
Pint
or
Gio
cond
a
Gira
sole
s
Mar
ilyn
Aqu
elar
re
Gue
rnic
a
Lanz
as
Maj
a de
snud
a
Gui
tarr
aEl
flau
tista
Cre
ació
n A
dán
Últi
ma
cena
Juic
io fi
nal
Men
inas
El g
rito
Pers
. mem
oria
Ron
da n
oche
Hila
nder
as16
44V
eláz
quez
...
Cab
aret
Anu
ncia
ción
Pz. S
. Mar
co
1656
Vel
ázqu
ez
1506
Da
Vin
ci
1642
Rem
bran
dt19
37Pi
cass
o
1510
Buo
narr
oti
1924
Dal
í
1893
Mun
ch
1889
Van
Goh
g
1964
War
hol
1800
1634
Vel
ázqu
ez
1823
Goy
a
Goy
a
1541
Buo
narr
oti
1497
Da
Vin
ci18
77D
egas
1913
Gris
1434
Ang
elic
o,F.
1866
Man
et
1750
Can
alet
to
...... ......... ... ... ... ...... ...... ... ......... ... ......
Vel2
Vel1
Vin1
Rem1
Pic1
Buo1
Dal1
Mun1
Van1
War1
Vel3
Goy2
Goy1
Buo2
Vin2
Deg1
Gri1
Ang1
Man1
Can1
Títu
loA
ñoPi
ntor
...ID
14971510163417501823
14971434
15061510
15411634
16441642
16561750
18231800
18661877
18891893
19131924
19371964
18931924
16441877
ÍND
ICE
secu
ndar
ioso
bre
Año
61© A. Jaime 2005 DBD Tema 6
Compatibilidad (2)
• En el ejemplo anterior se han definido dos índices sobre el fichero:– Un índice de agrupación sobre el campo pintor
(IA(Pintor))– Un índice secundario sobre el campo no clave
Año (IS-nc(Año)).– Se podrán definir todos los índices secundarios
que se desee• Causa de las incompatibilidades:
– Se debe a que los registros de un fichero sólo pueden mantenerse ordenados físicamente por un único concepto.
– Es decir, no pueden estar ordenados por Pintor y al mismo tiempo por Título
• Por lo tanto podemos afirmar que:– Un índice secundario (IS-c ó IS-nc) es
compatible con cualquier otra cosa, incluyendo otros índices secundarios.
– Los índices primarios, los de agrupación, los ficheros ordenados y los de direccionamiento calculado sólo son compatibles con índices secundarios.
– Tampoco se pueden tener dos índices primarios sobre el mismo fichero, ni dos de agrupación ni dos ordenaciones distintas ni dos direccionamientos calculados.
62© A. Jaime 2005 DBD Tema 6
Índices densos y dispersos
• Índice denso:– El que tiene una entrada para cada registro del
fichero de datos– Los ejemplos anteriores eran densos los índices
sobre clave y no densos los índices sobre no clave.• Índice disperso:
– El que no es denso, es decir, tiene entradas sólo para algunos registros del fichero de datos
• Ejemplo de índice primario disperso: el valor de cada hoja incluye el mayor valor del campo de indexación presente en el bloque apuntado. También puede hacerse lo mismo en índices de agrupación (ya que se aprovecha la ordenación de los registros)
Deg1
Buo2
Gri1
Pic1
Vel1
Vin1
War1
Deg1 Pic1 Vin1
Gira
sole
sM
enin
as
Ron
da n
oche
...... ...Ve
l1
Rem1
Van1
Gio
cond
aLa
nzas
Hila
nder
as... ......
Vel2
Vin1
Vel3
Mar
ilyn
Últi
ma
cena
......Wa
r1Vi
n2
Aqu
elar
reM
aja
desn
uda
Gui
tarr
a
... ... ...Go
y2Go
y1
Gri1
Cre
ació
n A
dán
Juic
io fi
nal
Anu
ncia
ción
... ......Bu
o1Bu
o2
Ang1
Gue
rnic
a
El fl
autis
taE
l gri
to.........
Pic1
Mun1
Man1
Pers
. mem
oria
Cab
aret
Pz. S
. Mar
co... ......
Dal1
Deg1
Can1
Títu
lo...
ID
Los menores o igual a “Buo2”
63© A. Jaime 2005 DBD Tema 6
Búsquedas en ficheros (resumen de costos)
Campo(especial
búsquedas)
Ninguno
Clave primaria
de Agrupación
de direccio-namientocalculado
de ordenación
de indexación
Montón(secuencial)
Ordenado
Direccio-namientocalculado
con índiceprimario
con índice deagrupación
con índicesecundariosobre clave
con índicesecundario
sobre no clave
OrganizaciónDel fichero Búsqueda
(= campo esp.)Búsqueda
(<,>,≤,≥ campo esp.)Búsqueda(otro campo)
S1:b/2 caso
intermediobuscar uno
b caso peor
o buscar todos
b = nº de bloquesx = nº de niveles (del índice, cuando es árbol B+)Los “...” se completan en el tema de optimización (estimación de costo en selección)
S1= lineal, S2=binaria, S3=un reg. por índice primario o direccionamiento calculado,S4=varios reg. desigualdad por índice primario o agrupación, S5=varios reg. igualdad por índice de agrupación, S6=por índice secundario
no se puede no se puede
S2:log2 b (clave)log2 b + ... (no
clave)
S3: 1
S3: (S2)x + 1
S5: (S2)x + ...
log2 b + ...
S4:x + ...
S4:x + ...
S6:x + 1
S6: x + ...
S6: x + ...
S6: x + ...
S1: b
Suponiendo que la
organización primaria sea fichero de montón
64© A. Jaime 2005 DBD Tema 6
Índices sobre clave compuesta (o clave múltiple)
• Claves compuestas de varios atributos:– Que aparecen frecuentemente en consultas– Mejor crear un índice para la combinación
• En el ejemplo anterior: Pintor + Año– Consulta: Pinturas de Velázquez realizadas en 1644– Ni Pintor ni Año son clave (puede haber varios registros
de un pintor y varios de un año)• Estrategias:
– IS-nc(Pintor) y Año sin índice:Usar el índice para buscar los registros con Pintor=“Velázquez”. Seleccionar entre ellos los de Año=1644
– IS-nc(Año) y Pintor sin índice:Usar el índice para buscar los registros con Año=1644. Seleccionar entre ellos los de Pintor=“Velázquez”
– IS-nc(Pintor) y IS-nc(Año):Con un índice buscar los de Pintor=“Velázquez” y el otro para buscar los de Año=1644. Luego hacer la intersección de los registros encontrados (o de sus punteros)
• Problema cuando ocurre a la vez lo siguiente:– Hay muchos cuadros de Velázquez– Hay muchos cuadros de 1644– Hay pocos cuadros de Velázquez
pintados en 1644
• Solución: índice sobre clave compuesta (también llamada clave múltiple)
Ninguna delas 3 estrategias
es eficiente
65© A. Jaime 2005 DBD Tema 6
Índices sobre clave compuesta (2) (o clave múltiple)
Fich
ero
de D
ATO
S(o
rden
ado
por
el p
ar d
e ca
mpo
s de
agru
paci
ón)
Últi
ma
cena
Gira
sole
s
Mar
ilyn
Aqu
elar
re
Gue
rnic
a
Men
inas
Maj
a de
snud
a
Gui
tarr
aEl
flau
tista
Cre
ació
n A
dán
Gio
cond
a
Juic
io fi
nal
Lanz
as
El g
rito
Pers
. mem
oria
Ron
da n
oche
Hila
nder
as16
44V
eláz
quez
...
Cab
aret
Anu
ncia
ción
Pz. S
. Mar
co
1634
Vel
ázqu
ez
1497
Da
Vin
ci
1642
Rem
bran
dt19
37Pi
cass
o
1510
Buo
narr
oti
1924
Dal
í
1893
Mun
ch
1889
Van
Goh
g
1964
War
hol
1800
1656
Vel
ázqu
ez
1823
Goy
a
Goy
a
1541
Buo
narr
oti
1506
Da
Vin
ci18
77D
egas
1913
Gris
1434
Ang
elic
o,F.
1866
Man
et
1750
Can
alet
to
...... ......... ... ... ... ...... ...... ... ......... ... ......
Vel2
Vel3
Vin2
Rem1
Pic1
Buo1
Dal1
Mun1
Van1
War1
Vel1
Goy2
Goy1
Buo2
Vin1
Deg1
Gri1
Ang1
Man1
Can1
Títu
loA
ñoPi
ntor
...ID
Buo
narr
oti,
1510
Ang
elic
o,F.
, 143
4
Buo
narr
oti,
1541
Can
alet
to, 1
750
Dal
í, 19
24D
a V
inci
, 149
7
Deg
as, 1
877
Da
Vin
ci, 1
506
Goy
a, 1
800
Goy
a, 1
823
Man
et, 1
866
Gris
, 191
3
Mun
ch, 1
893
Pica
sso,
193
7
Rem
bran
dt, 1
642
Van
Goh
g, 1
889
Vel
ázqu
ez, 1
634
Vel
ázqu
ez, 1
644
Vel
ázqu
ez, 1
656
War
hol,
1964
ÍND
ICE
de a
grup
ació
nso
bre
(Pin
tor,
Año
)
Buon..,1510
Canal..,1750
Degas,1877
Goya,1823
Picasso,1937
Velaz..,1644
Da Vi..,1497
Van G..,1889
Manet1866
66© A. Jaime 2005 DBD Tema 6
Índices sobre clave compuesta (3) (o clave múltiple)
• El ejemplo anterior es un índice de los estudiados hasta el momento, que se define sobre un conjunto de campos
• Además de índices de agrupación, también se pueden definir índices primarios y secundarios sobre clave compuesta.
• Los valores de clave compuesta se ordenan lexicográficamente:– (“Dalí”,1924) < (“Goya”,1800) para valores
distintos del primer campo– (“Da Vinci”, 1497) < (“Da Vinci”, 1506) para
valores iguales del primer campo
• Otras estructuras sobre claves múltiples:– Direccionamiento partido– Ficheros rejilla (Grid)
se estudiana continuación
67© A. Jaime 2005 DBD Tema 6
Direccionamiento partido
• Extensión del direccionamiento calculado • Solo admite comparaciones de igualdad• Función hash sobre la clave compuesta:
– Produce n direcciones– La dirección de la cubeta es la concatenación de las
n direcciones producidas• Ejemplo:
– Pintor=“Munch”, dirección resultante=100 (3 bits)– Año=1893, dirección resultante=10101 (5 bits)– Dirección de la cubeta: 100 10101 (concatenados)– Si solo buscamos los de Año= 1893, examinar las
cubetas 00010101, 00110101, ... , 11110101• Ventajas:
– Se puede aplicar a cualquier nº de atributos– Los bits de más peso pueden ser de los atributos
accedidos con más frecuencia– No hace falta una estructura por cada atributo
• Inconveniente:– No se pueden hacer consultas de rango (<,>,≤,≥)
sobre los atributos de la clave compuesta (ejemplo: Año>1893)
68© A. Jaime 2005 DBD Tema 6
Ficheros rejilla (Grid)
• Se construye una escala lineal (o dimensión) por cada clave de búsqueda
• En el ejemplo: escala lineal para ND y otra para Edad• Escala lineal: contiene la distribución uniforme de los
valores de una clave• Array rejilla: cada celda tiene una dirección de cubeta
donde se almacenan los registros correspondientes a los valores de sus escalas
• Para obtener los reg. con ND=4 y Edad=59 se consulta la celda (1,5). La dirección allí contenida indica la cubeta a examinar, donde estarán los reg. con ND=4 y Edad=59
5
4
3
2
1
0
543210Área de la cubeta
Fichero de empleados
0 1, 2
1 3, 4
2 5
3 6, 7
4 8
5 9, 10
Escala linealpara ND
0
≤20
1
21-25
2
26-30
3
31-40
4
41-50
5
>50
Escala lineal para Edad
Área de la cubeta
Arrayrejilla
69© A. Jaime 2005 DBD Tema 6
Ficheros rejilla (Grid) (2)
• Ventaja: consultas de rango sobre las claves para las que se han definido escalas lineales
• Para n claves de búsqueda:– n puede ser cualquier número– n escalas lineales– Array rejilla de n dimensiones
• El array rejilla permite una partición del fichero de datos mediante las claves de búsqueda definidas
• Además proporciona acceso mediante la combinación de valores de las dimensiones
• Funcionan bien ya que se reduce el tiempo de acceso sobre clave múltiple
• Necesitan más espacio para guardar la estructura del array rejilla.
• Si el fichero es dinámico es necesaria una reorganización frecuente del mismo
70© A. Jaime 2005 DBD Tema 6
Índices físicos y lógicos
Índices físicos• Son los vistos hasta ahora. Si el registro cambia de posición en
el disco hay que cambiar los punteros • Inconveniente: en ocasiones esto precisa muchas
actualizaciones. Considerar por ejemplo un fichero de direccionamiento calculado con varios índices secundarios
Índices lógicos• Por ejemplo los índices secundarios de Sql Server son índices
lógicos si se ha definido índice primario para la tabla.• Las entradas tienen la forma (K, Kp), donde:
– K: campo de indexación secundaria– Kp: clave primaria (la de la organización primaria, por
ejemplo direccionamiento calculado)• Un índice lógico es un índice secundario especial tal que al
buscar el registro de clave K, encuentra el valor de su clave primaria Kp (la del registro donde está K). Habrá que usar la organización primaria (por ejemplo direccionamiento calculado) para buscar el registro de clave primaria Kp.
• Incorporan un nivel adicional de indirección• Interesantes si las direcciones físicas van a cambiar con
frecuencia.
71© A. Jaime 2005 DBD Tema 6
Otros tipos de índices: análisis
• Muchos sistemas crean y desechan índices dinámicamente: – Ejemplo: para conseguir búsquedas más rápidas
por otros campos de forma temporal– Se consigue creando índices secundarios (sin
ordenación física)• Ventaja: se pueden crear con casi cualquier
organización.• Se utilizan para imponer la restricción de clave
• Fichero totalmente invertido:– Es un fichero de montón– Que tiene un índice secundario por cada campo– Los índices casi siempre son árboles B+
– Utilizado por ADABAS (Software AG)
• Fichero VSAM de IBM:– VSAM = método de acceso de almacenamiento
virtual– Es muy similar a la estructura de árbol B+
72© A. Jaime 2005 DBD Tema 6
Diseño físico: representación físicaConnolly / Begg 2002 (16.2, step 5)
• Objetivo: para cada tabla de la BD encontrar el tipo de fichero más adecuado y sus índices, de manera que se consiga un buen rendimiento del sistema.
PASO 1: ANALIZAR LAS TRANSACCIONES• Objetivo: entender su funcionalidad y estudiar las más
importantes.• Regla del 80/20: el 20% más activo del total de
transacciones supone el 80% del acceso a datos.• Se estudia sólo ese 20% (si hay muchas transacciones)
PASO 2: DECIDIR LA ORGANIZACIÓN PRIMARIA PARA CADA TABLA
• Objetivo: elegir una organización primaria (tipo de fichero) eficiente para cada tabla
PASO 3: DECIDIR ÍNDICES SECUNDARIOS ADECUADOS PARA CADA TABLA
• Objetivo: elegir aquellos índices secundarios que pueden mejorar el rendimiento del sistema de información.
73© A. Jaime 2005 DBD Tema 6
Paso 1: Analizar transacciones
1.1. Frecuencia de ejecución de cada transacción• Por ejemplo: 50 ejecuciones a la hora.• También interesa conocer los picos. Por ejemplo: de
17:00 a 19:00 habrá 100 ejecuciones por hora.• Sobre estos datos se aplica la regla 80-20.• Tendrán mayor prioridad, a disponer por ejemplo de
índice, aquellos atributos accedidos más frecuentemente.
1.2. A qué tablas accede cada transacción1) UPDATE Propiedad SET calle=..., localidad=..., codPostal=...,
tipo=..., habitaciones=..., renta=... WHERE numP=...
2) SELECT E.cargo, count(*)FROM Delegacion as D join Empleado as E
on D.numD = E.Delegacion WHERE D.localidad=“Pamplona” ORDER BY E.cargo
3) SELECT ...FROM Propiedad as P WHERE P.Tipo = ...
Tabla Transacción FrecuenciaVeces al día
Propiedad 1 20
Delegación 2 500Empleado 2 500
3 50
... ... ...
74© A. Jaime 2005 DBD Tema 6
Paso 1: Analizar transacciones (2)
1.3. Acceso a los atributos de las tablas
• Candidatos a tener estructuras de acceso: – Atributos en WHERE de SELECT, UPDATE o
DELETE. – Atributos que aparecen en JOIN. – Atributos presentes en operaciones que suponen
ordenación: ORDER BY, GROUP BY, UNION, DISTINCT, ...
• Candidatos a evitar estructuras de acceso:– En UPDATE los atributos del SET (los
modificados)
Tabla Transacción FrecuenciaVeces al día Atributos
Propiedad1 20
Delegación 2 500
Empleado 2 500
3 50
... ... ...
where: numP
where: localidadjoin: numDjoin: delegacionorder by: cargo
where: tipo
...
75© A. Jaime 2005 DBD Tema 6
Paso 2: Decidir la organización primaria
• Ejemplo: si obtendremos los empleados en orden alfabético interesa que la tabla empleado esté ordenada por nombre. Si también se obtienen los de salario comprendido entre dos valores la ordenación por nombre NO será de utilidad.
• Algunos SGBD sólo admiten definir índices.• Montón:
– Si la tabla tendrá pocas filas.– Si las consultas acceden a todas las filas (sin especificar
ningún orden).• Direccionamiento calculado:
– Si es importante mejorar una condición de igualdadsobre el atributo o atributos (where o join).
– NO es útil para acceso en orden por el(los) atributo(s) ni consulta de rango (<=, >=, <, >, between, ...).
– Si la tabla crece y disminuye continuamente convendría usar direccionamiento calculado dinámico.
• Índice primario (IP) ó índice de agrupación (IA):– Dos opciones:
1. Tabla desordenada (montón/dir. calculado) y crear IS necesarios.
2. Tabla ordenada con IP o IA y crear IS necesarios.– ¿Qué atributo(s) se elige(n) para el IP o IA (opción 2)?:
• El(los) más usado(s) en JOINs (podrá hacer la operación más eficiente)
• El(los) más usado(s) para recorrer las tuplas en orden respecto al(los) atributo(s) (ej: GROUP BY, ORDER BY, ...)
76© A. Jaime 2005 DBD Tema 6
Paso 3: Decidir índices secundariosCuándo SÍ crearlos
• Para cada clave extranjera/foránea accedida frecuentemente Intervienen en joins y el IS podría hacerlo más eficiente. Hay SGBD que definen automáticamente IS para cada clave extranjera/foránea
• Para atributos frecuentes en WHERE, JOIN, u operaciones que precisan ordenación: ORDER BY, GROUP BY, UNION, DISTINCT, ... Podrían obtenerse los resultados finales o intermedios recorriendo el IS o aprovechando la ordenación lógica de sus hojas.
• Plan sobre un sólo índice: cuando se puede resolver la consulta con sólo recorrer el índice. Ejemplo:
SELECT delegación, AVG(salario) FROM empleado GROUP BY delegación
• Con OR en WHERE sólo es útil tener índices para todo:SELECT * FROM Propiedad WHERE tipo=“piso” OR renta>600 OR habitaciones>2
Si existen sólo IS(tipo) e IS(renta) es necesario recorrer Propiedad para obtener las tuplas con habitaciones>2. Por tanto esos IS no acelerarían la consulta. Sí sirven si hubiera ANDs en lugar de OR.Con IS(tipo, renta, habitaciones) se pueden beneficiar tanto la consulta con OR como con AND.
por ejemplo conIS(salario, delegación)
ó con IS(delegación, salario)
77© A. Jaime 2005 DBD Tema 6
Paso 3: Decidir índices secundarios (2)Cuándo NO crearlos
• Si la tabla es muy pequeña Puede ser más eficiente cargar la tabla entera en memoria.
• Si se actualizan frecuentemente el o los atributos (UPDATE) o la tabla (INSERT/DELETE) supondría modificar también los índices.
• Si el resultado de la consulta incluye una proporción grande de la tabla (ej: el 70 % de las tuplas) exige recorrer gran parte de la tabla
• Si el atributo contiene cadenas de caracteres muy largas (ejemplo: párrafos) entrarían pocos valores en cada nodo del índice disminuyendo su eficiencia
• Menos importante:– Si hay escasez de espacio en disco los IS ocupan
disco.– Cuantos más IS más tarda el optimizador en decidirse
• En todos los casos: lo mejor es hacer pruebas sobre el resultado que ofrecen los IS frente a no tenerlos.
• Es útil usar las herramientas del SGBD que muestran el plan de ejecución.
• Hay que tener en cuenta que el SGBD crea índices para garantizar la unicidad de los atributos clave (primary key y unique)
78© A. Jaime 2005 DBD Tema 6
Ejemplo de diseño físico(tomamos el 20% más activo de 20 transacciones)
Empleado tiene 5.000 filas en 500 bloques y Propiedad 50.000 filas en 5000 bloques.
1. 200 veces al díaSELECT E.* FROM Empleado AS E JOIN Empleado AS J
ON E.Jefe=J.NumE WHERE J.Nombre=@nom AND J.Apellido=@ape
AND J.Delegacion=@dele2. 300 veces al día
SELECT E.* FROM Empleado AS EWHERE E.Cargo=@cargo AND E.Delegacion=@deleORDER BY E.Apellido, E.Nombre
3. 1000 veces al díaSELECT E.* FROM Propiedad AS P JOIN Empleado AS E
ON P.Empleado=E.NumEWHERE E.Nombre=@nom AND E.Apellido=@ape
AND E.Delegacion=@dele4. 5000 veces al día
SELECT P.* FROM Propiedad AS PWHERE P.Localidad=@loc AND P.Renta<=@rent_max
Tabla Trans. Frec. Atributos
Propiedad
Empleado
1 200
2 300
j: jefe, numEw:nombre, apellido,
delegaciónw: cargo, delegacióno: apellido, nombre
3 10004 5000
j: empleadow: localidad, renta
3 1000j: numEw: nombre, apellido,
delegación
Organizacióne índices secun.
IA(localidad, renta)IS-nc(empleado)
IP(numE)IS-nc(jefe)IS-nc(apellido, nombre, delegación)
También DC(numE)
79© A. Jaime 2005 DBD Tema 6
Ejercicios
80© A. Jaime 2005 DBD Tema 6
Ejercicio: acceso a ficheros de montón
PROYECTO es un fichero de montón con factor de bloques 2:
El siguiente programa escribe la información del proyecto 20:open(F,in_file,”PROYECTO.dat”);while not end_of_file(F) loop
read(F, R);if R.númerop = 20 then
put(R.nombrep); put(R.númerop); put(R.lugarp); put(R.numd); new_line; exit;
end if;end loop;close(F);
El descriptor del fichero incluye las siguientes direcciones de bloque: 1003, 1004 y 2007Cada vez que se transfiere un bloque a memoria se ejecuta la operación transferir nº bloque nº búfer
Se pide:a) Escribe en orden de ejecución las operaciones transferir y
read considerando que se dispone de un solo búfer.b) Haz lo mismo si se dispone de 2 búferes.c) Haz lo mismo que en el apartado a, si en vez de escribir por
pantalla se modifica R.númerop a 3 y se modifica el fichero con update
PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5
Automatización 10 Santiago 4Reorganización 20 Higueras 1
NuevasPrestaciones 30 Santiago 4
81© A. Jaime 2005 DBD Tema 6
Ejercicio: acceso a ficheros de montón (2)
a) Sabiendo que los bloques 1003, 1004 y 2007 son contiguos y que:– Tiempo medio de búsqueda: 8 mseg.– Retardo rotacional medio: 0,7 mseg.– Tiempo de transferencia de un bloque: 0,3 mseg.– Tiempo de proceso de un bloque: 0, 00004 mseg.
Obtener el tiempo necesario para leer completo el fichero anterior:– Con un único búfer– Con dos búferes
b) Hacer lo mismo que en el apartado anterior cuando los bloques NO son contiguos y además están en diferentes cilindros.– ¿Que sucedería si el tiempo de proceso de un bloque fuese
de 0,12 mseg.?
c) Un fichero tiene 2.005 registros de 100 bytes cada uno. Calcula el número de bloques necesarios si:– El factor de bloques es 1 (1 reg.en cada bloque)– El factor de bloques es 25
82© A. Jaime 2005 DBD Tema 6
Ejercicio: acceso a ficheros ordenados
PROYECTO es un fichero ordenado por Númerop con factor de bloques 1:
Supuesto que se dispone de la operación read_binario (que realiza una búsqueda binaria), el siguiente programa escribe la información del proyecto 20:
open(F,in_file,”PROYECTO.dat”);read_binario(F, 20, R);if R.númerop = 20 then
put(R.nombrep); put(R.númerop); put(R.lugarp); put(R.numd); new_line;
end if;close(F);
El descriptor del fichero incluye las siguientes direcciones de bloque: 1003, 1004, 2000, 2010, 3002 y 2007Se pide:
a) Escribe en orden de ejecución las operaciones transferirconsiderando que se dispone de un solo búfer.
b) Escribe las operaciones transferir si en lugar de escribir por pantalla se modifica el campo númerop del registro leído a 4 en el fichero con update
c) Qué operaciones transferir tendrán lugar si deseamos insertar el registro con núperop = 25 con insert
PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5
Automatización 10 Santiago 4Reorganización 20 Higueras 1
NuevasPrestaciones 30 Santiago 4
83© A. Jaime 2005 DBD Tema 6
Ejercicio: acceso a ficheros de direccionamiento calculado
PROYECTO es un fichero con clave de direccionamiento calculado Númerop. El factor de bloques es 2 y las cubetas constan de un solo bloque.
El fichero cuenta con un array con punteros a 20 cubetas principales (numeradas del 0 al 19) y una función hash h(k)
a) Sabiendo que h(k) obtiene lo siguiente para los valores de Númerop: h(1)=1, h(2)=10, h(3)=6, h(10)=1, h(20)=10, h(30)=4; dibuja el fichero de direccionamiento calculado resultante de insertar los registros del fichero PROYECTO en el siguiente orden de Númerop: 1, 3, 10, 20, 30, 2
b) Cuántos accesos a disco (transferencias de bloque) han sido necesarios para crear el fichero.
c) Cuántos accesos a disco son necesarios para encontrar el registro de clave de direccionamiento calculado 30.
d) Cuántos para encontrar el registro de Nombrep=‘Automatiza-ción’. Haz lo mismo para el registro de ‘Reorganización’.
e) Cuántos para insertar el registro de clave de direccionamiento calculado 80, donde h(80)=6
f) Cuántos para insertar el registro de clave de direccionamiento calculado 18, con h(18)=10
g) Cuántos para borrar el registro de clave de dir. calculado 2 (suponer que no se han insertado ninguno de los anteriores)
PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5
Automatización 10 Santiago 4Reorganización 20 Higueras 1
NuevasPrestaciones 30 Santiago 4
84© A. Jaime 2005 DBD Tema 6
Ejercicio: ficheros con índices
a) Dibuja el fichero PROYECTO si sus datos se organizan según un índice primario de un nivel sobre NÚMEROP, con factor de bloques 2 para los datos y 6 para el índice.
b) Haz lo mismo si se organizan según un índice primario de un nivel sobre NOMBREP con los mismos factores de bloques que en el apartado anterior.
c) Dibújalo ahora según un índice de agrupación de un nivel sobre NÚMD, con idénticos factores de bloques que en el apartado a.
d) Sobre el fichero del primer ejercicio se ha definido un índice secundario de un nivel sobre NOMBREP y otro sobre LUGARP, ambos índices con factor de bloques 3. Dibújalo.
e) Dibuja el fichero PROYECTO si sus datos se organizan con un único índice secundario de un nivel sobre NÚMD con factor de bloques 2 para índice y datos.
f) Qué índices de los apartados anteriores son densos y cuáles son dispersos.
PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5
Automatización 10 Santiago 4Reorganización 20 Higueras 1
NuevasPrestaciones 30 Santiago 4
85© A. Jaime 2005 DBD Tema 6
Ejercicio: ficheros con índices (2)
g) Dibuja el fichero del ejercicio d con todos los índices como árboles B+, donde en cada nodo (interno u hoja) entran 3 claves (en todos los índices).
h) Haz lo mismo para el ejercicio c, con las mismas suposiciones para los árboles B+.
i) Cuenta el número de accesos necesarios para ejecutar la
operación σNÚMEROP=59 en los ficheros de los ejercicios a, b y g, contando con un búfer para datos y otro para índices.
j) Haz lo mismo para σNÚMD=4 en los ficheros de los ejercicios c, e y h, contando con un búfer para datos y otro para índices.
k) Haz lo mismo para insertar <ProductoJ, 25, Donostia, 1> en los ficheros de los ejercicios a y h.
PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5
Automatización 10 Santiago 4Reorganización 20 Higueras 1
NuevasPrestaciones 30 Santiago 4
86© A. Jaime 2005 DBD Tema 6
Ejercicio: diseño físico en BD Hospital
Propón una representación física para la BD anterior capaz de proporcionar un buen rendimiento para las siguientes operaciones:1) 500 veces al díaSELECT P.*FROM Paciente AS P JOIN Medico as M ON P.Médico=M.CodWHERE M.Nombre=@nomMedico2) 2.000 veces al díaSELECT T.Enfermedad, M.NombreFROM (Paciente AS P JOIN Tratamiento AS T
ON P.NSS=T.Paciente) JOIN Medicamento AS M ON T.Medicamento=M.Cod
WHERE P.Nombre=@nomPacienteORDER BY T.Enfermedad, M.Nombre3) 1.000 veces al díaSELECT M.Especialidad, M.NombreFROM (Tratamiento AS T JOIN Paciente AS P
ON T.Paciente=P.NSS) JOIN Médico AS M ON P.Médico=M.Cod
WHERE T.Enfermedad=@nomEnfermedadORDER BY M.Especialidad
NSS Nombre Edad MédicoPaciente5.000 filas
Cod Nombre Dosis
DescripciónNom
Medicamento10.000 filas
Enfermedad500 filas
Cod Nombre EspecialidadMédico50 filas
Paciente Enfermedad MedicamentoTratamiento100.000 filas Duración
Con óvalo claves
alternativas
87© A. Jaime 2005 DBD Tema 6
Ejercicio: diseño físico en BD Agencias de Viajes
Propón una representación física para la BD anterior capaz de proporcionar un buen rendimiento para las siguientes operaciones:1) 10.000 veces al día
SELECT C.Apellido1, C. Apellido2, C.NombreFROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.CodWHERE R.Hotel=@hotel AND R.Localidad=@localidad2) 5.000 veces al día
SELECT C.Apellido1, C. Apellido2, C.NombreFROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.CodWHERE R.Fecha>=@inicio AND R.Fecha<=@fin3) 100 veces al día
SELECT DISTINCT H.NombreFROM Hotel AS HORDER BY H.Nombre4) 500 veces al día
SELECT C.Apellido1, C. Apellido2, C.Nombre, A.Empresa, A.DirFROM (Cliente AS C JOIN Reserva as R ON C.Cod=R.Cliente)
JOIN Agencia AS A ON R.Agencia=A.codWHERE C.Tfno=@tfno
Cod Empresa Dir ContactoAgencia1.000 filas
No hay claves
alternativas
Cod Nombre DirCliente20.000 filas Apellido1 Apellido2 Tfno
Nombre Localidad CategoríaHotel1.000 filas NumHabitaciones
Hotel Localidad AgenciaReserva100.000 filas FechaCliente
88© A. Jaime 2005 DBD Tema 6
Ejercicio: diseño físico en BD Pruebas Deportivas
Propón una representación física para la BD anterior capaz de proporcionar un buen rendimiento para las siguientes operaciones:1) 100 veces al día
SELECT D.País, D.NombreFROM Deportista AS DORDER BY D.País, D.Nombre2) 200 veces al día
SELECT E.Nombre, E.Localidad, P.Nombre, P.Categoría, P.Tipo FROM (Estadio AS E JOIN Asignación AS A ON
E.Cod=A.Estadio) JOIN Prueba AS P ON A.Prueba=P.Cod3) 1.000 veces al día
SELECT P.* FROM Asignación AS A JOIN Prueba AS P ON A.Prueba=P.CodWHERE A.Deportista=@codDeportista4) 10.000 veces al día
SELECT D.Nombre, D.País FROM (Asignación AS A JOIN Estadio AS E ON A.Estadio =E.Cod) JOIN Deportista AS D ON A.Deportista=D.CodWHERE E.Nombre=@nomEstadio AND E.Localidad=@localidad
AND A.Prueba=@PruebaORDER BY D.Nombre
Con óvalo claves
alternativasCod Nombre Edad PaísDeportista
8.000 filas
Cod NombreEstadio10 filas Localidad Aforo
Cod Categoría NombrePrueba200 filas Tipo
Deportista Prueba EstadioAsignación24.000 filas
89© A. Jaime 2005 DBD Tema 6
Ejercicio: diseño físico en BD Mariposas
1) 1000 veces al díaSELECT DISTINCT Esp.Nombre, Esp.CaracterísticasFROM ((Coleccionista AS C JOIN Ejemplar AS E
ON C.Colección=E.Colección) JOIN Mariposa AS M ON E.NomCientifico=M.NomCientifico) JOIN Especie AS Esp ON M.Especie=Esp.Nombre
WHERE C.Cod=@coleccionista2) 2000 veces al día
SELECT DISTINCT C.Cod, C.PrecioEstimadoFROM (Mariposa AS M JOIN Ejemplar AS E
ON M.NomCientifico=E.NomCientifico) JOIN Colección AS C ON E.Colección=C.Cod
WHERE M.Hábitat=@hábitat3) 800 veces al día
SELECT C.Cod, C.Nombre, C.ColecciónFROM Coleccionista AS CORDER BY C.Cod4) 20.000 veces al día
SELECT E.*FROM Colección AS C JOIN Ejemplar AS E
ON C.Cod= E.ColecciónWHERE C.Cod=@coleccion
No hay claves alternativas
Cod Ubicación PrecioEstimadoColección3.000 filas Tipo
Nombre CaracterísticasEspecie10.000 filas
Cod Nombre Dirección TfnoColeccionista4.500 filas Colección
NomCientífico NumeroEjemplar1.000.000 filas Procedencia Tamaño Colección
NomCientífico Origen HábitatMariposa100.000 filas EsperanzaVida Especie
90© A. Jaime 2005 DBD Tema 6
Ejercicio: diseño físico en BD Comida rápida
Propón una representación física para la BD anterior capaz de proporcionar un buen rendimiento para las siguientes operaciones:1) 1.000 veces al díaSELECT I.Suministrador, I.NomIngrFROM Ingrediente AS IORDER BY I.Suministrador, I. NomIngr2) 300 Veces al díaSELECT A.TamañoFROM (Articulo AS A JOIN Art_Ingr AS AI
ON A.NomArt=AI.NomArt) JOIN Ingrediente AS I ON AI.NomIngr=I.NomIngr
WHERE I.Precio = @precio3) 100 Veces al díaSELECT A.NomArt, A.PrecioFROM Articulo AS AORDER BY A.NomArt4) 5.000 Veces al díaSELECT P.*, SUM(PA.Cantidad*A.Precio) AS PrecioPedidoFROM (Pedido AS P JOIN Ped_Art AS PA
ON P.Numero=PA.Numero) JOIN Articulo AS A ON PA.NomArt=A.NomArt
WHERE P.Numero=@pedidoGROUP BY P.Numero
Con óvalo claves
alternativas
NomIngr Precio SuministradorIngrediente500 filas
Número NomArtPed_Art300.000 filas
NomArt Tipo Precio TamañoArtículo50 filas
Número FechaPedido100.000 filas HoraPedido HoraServidoTfno
NomIng NomArtArt_Ingr1.000 filas
Cantidad