Está en la página 1de 67

Estructuras de almacenamiento

y mtodos de acceso
Objetivos
Conocer diferentes tcnicas para colocar los
registros de un fichero en el disco
Entender la teora y aplicacin de las tcnicas de
dispersin (hashing) interna y externa
Conocer cmo usar dispersin para facilitar la
expansin dinmica de ficheros
Comprender la teora y aplicacin de los ndices
primarios, secundarios y de agrupamiento
Distinguir entre ndices densos y no densos
Identificar y comprender las ventajas e
inconvenientes de cada tcnica de organizacin de
ficheros
1

Estructuras de almacenamiento
y mtodos de acceso
Contenidos
1. Conceptos generales de organizacin de ficheros
2. Organizacin primaria
1.
2.
3.
4.
5.

Ficheros no ordenados
Ficheros ordenados
Ficheros mixtos
Ficheros dispersos
rboles B y otras estructuras de datos

3. Organizacin secundaria
1. ndices ordenados de un solo nivel
2. ndices de mltiples niveles

4. Ficheros mixtos en Oracle


5. Ficheros dispersos en Oracle
6. Especificacin de ndices en SQL y Oracle
2

Conceptos generales de organizacin


de ficheros
Los datos de una BD estn almacenados en un medio
de almacenamiento en el ordenador:
Almacenamiento secundario de disco magntico
Estudiaremos tcnicas de almacenamiento en disco
Formas de organizar ficheros de datos en el disco
Para conseguir acceso a BD con rendimiento aceptable

Cada tcnica tiene ventajas/inconvenientes, conocidas


por
Diseadores y ABDs
Implementadores de SGBD

Una aplicacin, en cierto momento, slo necesita


acceder a una porcin de la BD. Deber...

Localizarla en disco
Copiarla a la memoria principal
Procesarla
Reescribirla en disco (si se modific)
3

Conceptos generales de organizacin


de ficheros
Registros, tipos de registro y bloques

Datos en disco organizados en ficheros de registros


Registro

Coleccin de valores de datos relacionados entre s


Cada valor (1 o ms bytes) corresponde a un campo
Cada campo tiene asociado un tipo de datos
Definicin de Tipo de Registro: { (nombre-campo,tipo-datos) }

NOMBRE DEL TIPO DE REGISTRO

NOMBRE DEL CAMPO

TIPO DE DATOS DEL CAMPO (valores que puede aceptar)

type EMPLEADO = record

NOMBRE

:
:
:
:
:
:

NSS
SALARIO
CDIGO_ PUESTO
DEPARTAMENTO
FECHA_ CONTRATO

packed array [1..30] of character;


packed array [1..9] of character;
integer;
integer;
packed array [1..20] of character;
packed array [1..4] of character;

end;
4

Conceptos generales de organizacin


de ficheros
Registros, tipos de registro y bloques

Los registros son almacenados en disco de forma que,


cuando se necesiten, su recuperacin sea eficiente
Transferencia de datos entre memoria principal y
disco en unidades de bloque
Un disco magntico est estructurado en pistas y sectores
Divisin de pista en bloques (pginas) por el SO al formatear el
disco

Si se necesita informacin contenida en cierto bloque...


Se pasa al dispositivo hardware de E/S del disco:
Direccin hardware del bloque
Direccin de un bfer (memoria intermedia)

Lectura: copia el bloque del disco al bfer


Escritura: copia el bloque del bfer al disco
5

Conceptos generales de organizacin


de ficheros
Registros, tipos de registro y bloques (y 2)

Tiempo(localizacin&transferencia)

>Tiempo(procesamiento CPU)
Bsqueda
+ Retardo Rotacional
+ Transferencia

Cuello de botella

La solucin...
estructurar los ficheros para minimizar el n de
transferencias de bloques necesarias para
localizar y transferir datos del disco a memoria principal
6

Conceptos generales de organizacin


de ficheros
Ficheros, registros de longitud fija y
variable
Fichero
Secuencia de registros con igual estructura

Fichero mixto
Contiene registros de diferente tipo
Aumenta la eficiencia de operaciones de reunin

Fichero de registros de longitud fija


Fichero de registros de longitud variable, debido a...
Registros del mismo tipo pero con algn campo
de longitud variable,
multivalorado,
opcional

Fichero mixto
7

Conceptos generales de organizacin


de ficheros
Grabacin de registros en bloques,
registros extendidos y no extendidos
Los registros se asignan a bloques de disco
tamao(bloque) = B bytes
Si B > tamao(registro) varios registros por bloque

Fichero con registros de longitud fija R


Si B R factor de bloques fbl = B / R registros
Espacio desocupado = B ( fbl * R ) bytes
Organizacin extendida: aprovechar este espacio
almacenando ah (una parte de) otro registro (y el resto en
otro bloque)
Organizacin no extendida: no se permite que un registro
est almacenado en varios bloques
8

Conceptos generales de organizacin


de ficheros
Grabacin de registros en bloques,
registros extendidos y no extendidos

(y 2)

Fichero con registros de longitud variable


Cada bloque contiene un n distinto de registros
fbl = nmero medio de registros por bloque
Es posible estimar el n de bloques necesarios para
contener r registros:

r / fbl bloques
Puede utilizarse organizacin extendida o no extendida:
Organizacin extendida si el tamao medio de los registros es
grande, pues se reduce el espacio desperdiciado por bloque

Conceptos generales de organizacin


de ficheros
Descriptor de fichero (cabecera)

Contiene datos necesarios para que los programas


puedan acceder a los registros del fichero
Incluye informacin
para determinar la direccin en disco de los bloques y
descripcin de formato de los registros

Fichero con registros no extendidos y de longitud fija:


longitud y orden de campos

Fichero con registros de longitud variable:


caracteres separadores entre campos
marcas de tipo de campo (si campos opcionales)
marcas de tipo de registro (si fichero mixto)

10

Conceptos generales de organizacin


de ficheros
Operaciones con ficheros

Operaciones de obtencin de datos


Localizar ciertos registros para examinar y procesar su
contenido

Operaciones de actualizacin
Insertar, eliminar o modificar registros

Suele ser necesaria una seleccin previa con base en


una condicin de bsqueda
Si varios registros la satisfacen, se localiza el primero de ellos

Registro Actual:
El localizado ms recientemente en el bfer (memoria
intermedia)
11

Conceptos generales de organizacin


de ficheros
Operaciones con ficheros (y 2)

Operaciones sobre un solo registro


Buscar (Localizar)
Leer (Obtener)
Buscar Siguiente
Eliminar
Modificar
Insertar
Operaciones sobre un conjunto de registros
Lectura Ordenada
Buscar Todos
Reorganizar
Operaciones para Abrir y Cerrar ficheros
12

Conceptos generales de organizacin


de ficheros
Organizacin de ficheros vs. Mtodo de
acceso
Organizacin de fichero:

Estructuracin de los datos de un fichero en registros,


bloques y estructuras de acceso
Tcnica de organizacin de ficheros: cmo colocar los
registros y bloques en el medio de almacenamiento y cmo
interconectarlos
Objetivo: localizacin eficiente de los datos

Mtodo de acceso:
Conjunto de programas que permite realizar operaciones
sobre los datos de un fichero
Proporciona acceso a los datos; hace uso de las estructuras
de acceso (si existen)

Combinados, deben maximizar la eficiencia de las


operaciones ms frecuentes sobre el fichero
13

Conceptos generales de organizacin


de ficheros
Tipos de organizacin de ficheros
Organizacin Primaria
Determina la forma en que los registros del fichero se colocan
fsicamente en el disco y cmo se puede acceder a ellos
Fichero No Ordenado (montn)
Fichero Ordenado (secuencial)
Fichero Mixto
Fichero Disperso (direccionamiento directo o hashing)
rboles B y otras estructuras de datos (en el tema)

Organizacin Secundaria (o indexada)


ndice Ordenado de un nivel
ndice Multinivel
14

Organizacin primaria
Fichero no ordenado (montculo o montn)
Registros almacenados al final del fichero, en orden
de insercin
Insercin muy eficiente
Bsqueda lineal
Eliminacin fsica o por marca
Reorganizacin para recuperar espacio desocupado
O aprovechar huecos para nuevos registros

Modificacin de un registro
Si longitud variable, puede provocar eliminacin + insercin

Lectura ordenada supone creacin de una copia ordenada


del fichero
Suele utilizarse una tcnica de ordenacin externa
15

Organizacin primaria
Fichero ordenado (secuencial)
Registros almacenados de forma ordenada segn
valores de cierto campo
campo de ordenacin
Si el campo es clave, se le llama clave de ordenacin

Ventajas respecto a los ficheros no ordenados


Lectura ordenada muy eficiente si el orden es el de los valores
del campo de ordenacin: lectura secuencial
Buscar siguiente (en el orden del campo de ordenacin) no suele
necesitar otro acceso a bloque
Buscar un registro dado su valor del campo de ordenacin es
rpido: bsqueda binaria

Pero si la Lectura ordenada o Buscar no estn basados en


el campo de ordenacin, estas ventajas
desaparecen
16

Organizacin primaria
Fichero ordenado (2)
Insercin
supone encontrar posicin correcta para el registro y
abrirle espacio mediante desplazamiento de registros
(costoso!)

Eliminacin fsica o por marca

con problemas de eficiencia similares a la insercin

Para aumentar la eficiencia de la insercin

Dejar espacio libre en cada bloque para nuevos registros


Fichero de desbordamiento auxiliar, no ordenado, que
peridicamente se ordena y fusiona con el fichero principal
Buscar se complica: binaria en principal + lineal en auxiliar

Modificacin
Si la condicin de bsqueda se basa en el campo de
ordenacin, usar bsqueda binaria. Si no, bsqueda lineal
Si el campo modificado es el de ordenacin, el nuevo valor
puede provocar su cambio de ubicacin: eliminacin +
insercin
17

Organizacin primaria
Fichero ordenado (y 3)
Fichero secuencial encadenado
Registros ordenados de forma lgica (no fsica)
Uso de punteros
Mayor flexibilidad
Estructuras de datos para implementar este tipo de
ficheros

Listas lineales
Listas mltiples
Anillos o listas circulares
rboles binarios de bsqueda

18

Organizacin primaria
Fichero Mixto
Almacena registros de diferente tipo
Los registros provienen de distintas tablas ...
Estn relacionadas mediante una o varias columnas
Clave externa y clave candidata

Las operaciones ms frecuentes son las consultas y no es


habitual modificar las columnas comunes
Solicitudes frecuentes de filas relacionadas de ambas tablas
Operaciones que implican la reunin (JOIN) de las tablas

En el fichero...
Los registros relacionados estn fsicamente adyacentes
clave del fichero mixto: campos comunes de los registros

Ventajas del uso de ficheros mixtos


Mayor eficiencia de las operaciones con JOIN entre las tablas
Valores de la clave del fichero mixto almacenados slo una vez
En Oracle se denominan cluster de tablas
19

Organizacin
primaria
Ejemplo de
uso de
un
fichero
mixto
vs.
dos
ficheros
individuale
s

(DEPTNO)

20

Organizacin primaria
Fichero de direccionamiento calculado
(Hashing)
Permite acceso rpido a registros segn una
condicin de bsqueda de igualdad sobre un solo
campo
Campo de dispersin (columna de dispersin)
Si es clave del fichero, se llama clave de dispersin

Funcin de dispersin h
Se aplica al valor k del campo de dispersin de un registro
(fila)
Y produce la direccin del bloque de disco en el que est el
registro
La localizacin del registro dentro del bloque se hace en el
bfer

21

Organizacin primaria
Fichero de direccionamiento calculado

(2)

Ejemplos de funciones h
Mdulo:
h(k) = k mod M
Plegado:
Si k=k1k2k3k4, h(k)=k1k2k3k4 , { + , xor }
Truncamiento: h(k) = k1k3

Desventaja del direccionamiento calculado


No se garantiza que valores distintos de k
produzcan direcciones diferentes en el fichero

Espacio de dispersin > Espacio de direcciones


Estudiaremos las tcnicas de dispersin...
Interna
Externa
Dinmica

22

Organizacin primaria
Fichero de direccionamiento calculado

(3)

Dispersin Interna
Espacio de direcciones destino
Conjunto de M registros
Un array de M posiciones en memoria principal

Funcin de dispersin h
Traduce el valor del campo de dispersin en un entero [0,
M-1]

Colisin
Al aplicar h a un registro que se desea insertar en el fichero,
se obtiene una direccin ocupada
El nuevo registro es un sinnimo

23

Organizacin primaria
Fichero de direccionamiento calculado

(4)

Dispersin Interna
Tcnicas de resolucin de colisiones
Direccionamiento abierto
Bsqueda secuencial de una posicin vaca

Encadenamiento
Uso de listas de sinnimos en un rea de desbordamiento

Dispersin mltiple
Aplicacin de una segunda funcin h
Si se produce colisin, se aplica direccionamiento abierto

h debe ser sencilla y rpida de calcular


Su objetivo es conseguir una distribucin
uniforme de los registros (sin acumulamientos)
Mnimo nmero de colisiones
Mximo nmero de posiciones ocupadas
24

Organizacin primaria
Fichero de direccionamiento calculado

(5)

Dispersin Externa
Espacio de direcciones destino
Conjunto de cubetas
Cubeta=grupo de registros del fichero (1 o ms bloques
contiguos)

Funcin de dispersin h
Traduce el valor del campo de dispersin en un nmero de
cubeta
El descriptor de fichero contiene, para cada cubeta, la
correspondencia nmero de cubeta direccin en disco

Decrece el nmero de colisiones


Los sinnimos se dispersan dentro de una cubeta
Uso de cubeta de desbordamiento (comn al resto) y listas de
registros sinnimos para insertar registros en cubetas ya
completas

25

Organizacin primaria
Fichero de direccionamiento calculado

(6)

Dispersin Externa
Bsqueda o Localizacin
Acceso directo si condicin de bsqueda basada en campo de
dispersin el ms rpido: 1 acceso a bloque
Si no, bsqueda lineal

Lectura ordenada
Costosa: h no suele mantener registros ordenados

Eliminacin
Sacarlo de la cubeta y ocupar espacio con un sinnimo
O sacarlo de la lista de desbordamiento (si estaba ah)

Modificacin
Si la condicin de bsqueda se basa en el campo de dispersin,
usar h para localizar registro. Si no, bsqueda lineal
Si el campo modificado es el de dispersin, el nuevo valor
puede provocar su cambio de cubeta: eliminacin + insercin
26

Organizacin primaria
Fichero de direccionamiento calculado

(7)

Dispersin Externa
Asigna al fichero una cantidad de espacio fija

M cubetas
Cada cubeta con capacidad para m registros
Espacio disponible = m*M registros
Nmero real de registros r

< m*M gran desperdicio!


Si r > m*M muchas colisiones!

Si r

Largas listas de registros de desbordamiento


lenta obtencin de registros

Solucin: dispersin dinmica


27

Organizacin primaria
Fichero de direccionamiento calculado

(8)

Dispersin Dinmica
Representacin del resultado de la funcin de
dispersin h como una cadena de bits
Valor de direccionamiento calculado del registro

Los registros se distribuyen en cubetas segn


los primeros bits de su valor de direcc.
calculado
Tipos de dispersin dinmica

Direccionamiento calculado extensible


Direccionamiento calculado lineal
28

Organizacin primaria
Fichero de direccionamiento calculado

(9)

Dispersin Dinmica: Direccionamiento Calculado


Extensible
Fichero + Directorio
Directorio: array de 2d direcciones de cubeta
d es la profundidad global del directorio

Determinacin de la posicin de un registro:


El valor de los primeros d bits del valor de direccionamiento
calculado indican una posicin del directorio
Dicha posicin contiene la direccin de cubeta en la que
almacenar el registro

En el directorio...
Varias posiciones pueden contener la misma direccin de
cubeta
La profundidad local d de cada cubeta indica el n de bits
considerados: determina su contenido

29

Organizacin primaria
Fichero de direccionamiento calculado

(10)

Dispersin Dinmica: Direccionamiento Calculado


Extensible
Obtencin de un registro
Dos accesos a bloque: directorio + cubeta

d puede disminuir o aumentar en 1 bit


reducir a la mitad o duplicar el tamao del
directorio
Duplicar si se desborda una cubeta cuya (d = d)
Reducir a la mitad si (d < d) en todas las
cubetas

30

Organizacin primaria
Fichero de direccionamiento calculado

(y 11)

Dispersin Dinmica: Direccionamiento Calculado


Extensible
Dispersin dinmica vs Dispersin esttica
Ventajas
El rendimiento no se degrada a medida que crece el fichero
No se asigna espacio para futuros crecimientos: se aaden
cubetas adicionales conforme se necesitan
Espacio extra para directorio insignificante
Como mucho 2k, k = n bits del valor de direccionamiento calculado

Reorganizaciones de registros poco importantes


Si se divide o duplica una cubeta, slo se reorganizan sus registros
La ms costosa: duplicacin o reduccin a la mitad del directorio

Inconveniente (leve!)
Necesarios 2 accesos a bloque para localizar un registro
31

Organizacin secundaria:
Ficheros de ndices
Un ndice es una estructura de acceso adicional
Almacenado en disco
Utilizado junto con el fichero de datos (fichero principal)
Fichero principal estructurado segn una organizacin
primaria

Agiliza la obtencin de registros segn valores de


cierto campo del fichero: campo de indexacin
Primero se accede al ndice, que apunta al bloque del fichero
donde est almacenado el registro

Es posible crear ...


un ndice sobre cualquier campo de un fichero
varios ndices sobre un mismo fichero

Un ndice puede ser de uno de estos tipos


Ordenado de un nivel: Primario, de Agrupamiento,
Secundario
De mltiples niveles: rbol B, B+, B*
32

Organizacin secundaria
ndices ordenados de un nivel
El fichero de ndice contiene un conjunto de entradas
Cada entrada incluye dos campos, para almacenar...
Un valor de los almacenados en el campo de indexacin
Un puntero al registro que contiene dicho valor
o al bloque que lo contiene

Las entradas estn ordenadas


Segn valores extrados del campo de indexacin del fichero
ppal
Es posible realizar bsquedas binarias sobre el ndice

ndices densos y no densos


Denso si contiene una entrada por cada registro del fichero
En otro caso, es no denso (o disperso)

Operaciones sobre ficheros con ndices:


Buscar implica bsqueda binaria sobre el ndice
Insertar y Eliminar pueden provocar modificacin del ndice
Menos accesos a bloques, pero coste de mantener el ndice
33

Organizacin secundaria
ndice primario
Sobre ficheros con registros ordenados segn los
valores de un campo clave
El campo de indexacin es dicha clave de ordenamiento
El ndice es un fichero ordenado con...
Una entrada por cada bloque de fichero principal (ndice no
denso)

Cada entrada tiene longitud fija y 2 campos:


Valor del campo de indexacin de un registro ancla de
bloque
Puntero al comienzo de cada bloque

Bloques de ndice

< Bloques de fichero principal

Operaciones sobre ficheros con ndices primarios:


Insertar y Eliminar pueden provocar la modificacin del
ndice si afectan a los registros ancla
34

Organizacin secundaria
ndice de agrupamiento
Sobre ficheros con registros ordenados segn los
valores de un campo no clave
El campo de indexacin es dicho campo de
agrupamiento
El ndice es un fichero ordenado con...
Una entrada por cada valor distinto del campo de
agrupamiento
del fichero principal (ndice no denso)
Cada entrada tiene longitud fija y 2 campos:
Valor distinto del campo de indexacin (= de
agrupamiento)
Puntero al primer bloque en que aparece dicho valor

Operaciones sobre ficheros con ndices de


agrupamiento:
Insertar y Eliminar costosas y provocan modificacin del
ndice

35

Organizacin secundaria
ndice secundario sobre campo clave
Sobre un campo que es clave del fichero principal, y
que
no marca la ordenacin de los registros de datos
El campo de indexacin es dicho campo: clave secundaria
El ndice es un fichero ordenado con...
Una entrada por cada registro del fichero principal (ndice
denso)

Cada entrada tiene longitud fija y 2 campos:


Valor del campo de indexacin (= clave secundaria)
Puntero al registro o al bloque en que aparece dicho
valor

Operaciones sobre ficheros con ndices de este tipo:


Insertar y Eliminar provocan la modificacin del ndice

Tiene ms entradas que un ndice primario

36

Organizacin secundaria
ndice secundario sobre campo no clave
Sobre un campo que no es clave del fichero principal,
y que
no marca la ordenacin de los registros de datos
El campo de indexacin es dicho campo
Opciones
para
crear
el ndice,
fichero
ordenado
Una entrada
por cada
registro
del fichero
principal
(ndice
con...
denso)
entradas de longitud fija y 2 campos: valor y puntero a
registro
Una
valores
entradarepetidos
por valor distinto
del
de indexacin (no
del campo
decampo
indexacin
denso)

entradas de longitud variable: valor y varios punteros a


Una
bloque
entrada por valor distinto del campo de indexacin,
y un nivel adicional de indireccin
(ndice no
denso)

entradas de longitud fija y 2 campos:


Valor del campo de indexacin
Puntero a un bloque de punteros a registro

37

Organizacin secundaria
ndice de mltiples niveles
Se construye partiendo del ndice sobre el fichero principal de
datos en disco (ndice de nivel base), mediante
creacin sucesiva de ndices primarios sobre
ndices
El ndice de nivel base puede ser de cualquier tipo, si
ste...
tiene entradas de longitud fija y
almacena valores distintos del campo de indexacin

El ndice multinivel es denso si lo es el de nivel base


Se puede saber si un registro est en el fichero sin acceder a
ste

Mejora el rendimiento de la bsqueda binaria: a cada


paso desecha ms entradas que en un ndice de un
solo nivel
La insercin, eliminacin y modificacin de registros de

38

Organizacin secundaria
Tipos de ficheros en funcin de su
indexacin
Fichero totalmente invertido
Tiene un ndice secundario sobre cada uno de sus campos
Los registros nuevos se insertan al final del fichero (no
ordenado!)

Fichero secuencial indexado


Registros ordenados segn valores de un campo clave y
Con un ndice primario de mltiples niveles sobre dicha clave
Facilita acceso secuencial e individual (directo a travs del
ndice)

Cada SGBDR comercial implementa los ndices


empleando sus propias tcnicas
Oracle emplea, entre otras estructuras, la de rbol B *
39

Especificacin de ndices en SQL


ndices y el SQL estndar
Antiguas versiones del SQL estndar contaban con
sentencias para crear y destruir ndices
El LDD no inclua clusulas PRIMARY KEY o UNIQUE
restriccin de integridad de clave mediante creacin de
ndice nico

La versin SQL-92 no considera los ndices


Pues los ndices son caminos fsicos de acceso a los datos
Restriccin de clave mediante clusulas PRIMARY KEY y UNIQUE
La unicidad de una columna es un concepto lgico

40

Especificacin de ndices en SQL


ndices en los SGBDR comerciales
En muchos SGBD comerciales, el ndice ...
es una estructura de datos independiente
se crea y destruye dinmicamente, sin afectar al fichero principal

Conviene crear un ndice sobre cierto campo si se va a


acceder con frecuencia al fichero segn una condicin de
seleccin o reunin en la que aparezca dicho campo
El ndice incrementar la velocidad de esas consultas o accesos
Cada ndice sobre una columna hace que insercin, borrado y
actualizacin sean ms complejas y consuman ms tiempo

Normalmente, el SGBD crear un ndice secundario


Independiente de la ordenacin fsica de los registros
Puede crearse con casi cualquier organizacin primaria de ficheros
Sobre un mismo fichero puede crearse varios ndices secundarios

41

Especificacin de ndices en SQL


ndices en Oracle
Tipos de ndices, segn su implementacin
ndices de rbol B, o normales; los creados por defecto
ndices de tablas
ndices de clusters

ndices
ndices
ndices
ndices

bitmap
particionados
basados en funciones
de dominio

Por defecto, Oracle almacena las filas de una tabla


como una coleccin desordenada de filas
No cabe hablar de ndices primarios o de agrupamiento,
tal y como los hemos definido en este tema

Aunque es posible almacenar una tabla con una


estructura de ndice (rbol B*): index organized table
42

Especificacin de ndices en SQL


ndices en Oracle

(2)

Tipos de ndices, segn la columna (o campo) de


indexacin
ndice nico
Basado en una columna de tabla cuyos valores son nicos

ndice Primario (un caso particular de ndice nico)


Basado en una clave primaria de tabla

ndice Secundario
Basado en una columna con valores no nicos

ndice Compuesto, tambin ndice Concatenado


Basado en 2 o ms columnas de una misma tabla
Puede ser nico, Primario o Secundario
Un ndice Compuesto nico es til para imponer la unicidad de la
combinacin de valores de varias columnas

En Oracle el significado de los conceptos ndice primario


e ndice secundario no coincide con la teora explicada
en el apartado 4.3 de este tema
43

Especificacin de ndices en SQL


ndices en Oracle

(3)

Sentencia LDD para crear ndices


CREATE INDEX Indice_Genero_Pelicula ON Pelicula ( genero ) ;

Especificacin del orden ascendente o descendente


de las entradas del ndice
CREATE INDEX Indice_Ao_Pelicula ON Pelicula ( ao DESC ) ;

ndice compuesto
CREATE INDEX Indice_Nombres_Director
ON Director ( apellido1 ASC, apellido2 ASC, nombre DESC ) ;
El ndice incrementa la velocidad de las consultas que acceden
por...
apellido1
apellido1 y apellido2
apellido1 y apellido2 y nombre
Pero el SGBD no usar el ndice para consultas que acceden por...
apellido2
nombre
apellido2 y nombre
44

Especificacin de ndices en SQL


ndices en Oracle

(4)

Algunos SGBDR, como Oracle, crean un ndice sobre


cada clave (primaria o alternativa) de forma automtica
Campo de indexacin: columna (o conjunto de columnas)
especificada como UNIQUE o PRIMARY KEY en el esquema de BD
El SGBD emplear el ndice para imponer la restriccin de clave

Creacin explcita de un ndice nico


Usado para imponer una restriccin de clave sobre una o
varias columnas
CREATE UNIQUE INDEX Indice_Director ON Director(apellido, fechanacim) ;
En el caso de que la tabla DIRECTOR ya contenga datos, este
ndice slo ser creado si cada combinacin de valores apellido y
fechanacim es distinta para todas las filas de la tabla
Oracle recomienda la creacin explcita del ndice, y no slo la
declaracin de la clave como UNIQUE en la especificacin de la
tabla
45

Especificacin de ndices en SQL


ndices en Oracle

(y 5)

Sentencia LDD para destruir ndices


DROP INDEX ndice_Genero_Pelcula ;
Conviene eliminar un ndice cuando ya no se espera realizar
consultas basadas en el campo de indexacin
Desaparece el coste de mantenimiento del ndice
Se recupera el espacio de almacenamiento ocupado por el
ndice

No se puede eliminar un ndice creado


automticamente por el sistema (debido a la
especificacin de una restriccin de integridad UNIQUE o PRIMARY
KEY sobre una o varias columnas), sino que se debe
eliminar (DROP) o desactivar (DISABLE) la restriccin de

integridad correspondiente

46

Seleccin de la organizacin de ficheros y


estructuras de acceso
Seleccin: decisiones de diseo fsico
La mayora de SGBDR representa cada tabla base
como un fichero de BD, para el cual es necesario
especificar...
Tipo de fichero,
Columnas sobre los que definir estructuras de acceso
(ndices)
Decisiones de diseo fsico
Sobre estructuras de almacenamiento
(organizacin de ficheros)

Sobre

ndices (estructuras de acceso)

47

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo emplear un fichero no ordenado


La tabla es pequea
Registros pequeos o factor de bloques elevado
Es inspeccionada con pocos accesos a bloque

Normalmente, las consultas u operaciones ms


frecuentes sobre la tabla seleccionan o acceden a
muchas filas (es decir, ms del 20% del total de las
filas)

48

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo emplear un fichero ordenado


La tabla es de tamao medio-grande y con
frecuencia es...
ordenada segn valores de una columna c
c aparece en clusulas ORDER BY, GROUP BY, DISTINCT, o como
columna de REUNIN o de UNION

accedida con criterios de seleccin que


incluyen un rango de valores de c
procesada secuencialmente en el orden de los
valores de c (lectura ordenada)
La tabla no es frecuentemente modificada con
INSERT, UPDATE (c) o DELETE
49

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo emplear un esquema de dispersin


Los accesos a la tabla son frecuentes, individuales
y aleatorios, y segn valores de una columna c,
que...

Es muy utilizada en operaciones de seleccin por igualdad


Es muy usada en condiciones de reunin (JOIN) equi-reunin
Sus valores apenas son modificados
Los valores de c son muchos y variados: permiten una buena
distribucin de los registros, evitando colisiones

Se conoce el tamao del fichero y no se espera un


crecimiento o reduccin considerable
En caso contrario, puede usarse dispersin dinmica
50

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo evitar un esquema de dispersin


Los accesos a la tabla son
por rango de valores de a, salvo si es una lista: a IN (v1, v2, ...vn)
con criterios de seleccin que no incluyen a, o incluyen
slo parte de a
en orden, segn los valores de a
No todos los SGBD soportan dispersin (Oracle s)
Puede definirse un solo esquema hashing por tabla
No es posible combinar dispersin y ordenacin: ambos
determinan la posicin fsica de los registros en el fichero
51

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo emplear un fichero mixto (cluster de tablas)


Son muy frecuentes las consultas que implican...
La reunin entre dos (o ms) tablas relacionadas
Ejemplo: relacin 1:N va clave primaria/clave externa

El agrupamiento de filas de la tabla del lado N, segn valor de la


clave externa

En Oracle crear un fichero mixto significa crear un cluster, definir


clave de cluster, crear ndice cluster, y almacenar las tablas dentro

Ventajas
Acelera la ejecucin de las reuniones entre las tablas
registros relacionados estn en el mismo bloque menos accesos a
bloque

Aprovechamiento del espacio


52

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre estructuras de almacenamiento

Cundo emplear un fichero mixto (cont.)


Inconvenientes
Consultas a cada tabla por separado muy poco eficientes
Recorrido completo de las filas de cada tabla individual,
ms costoso (demasiados accesos a bloque)
La insercin es poco eficiente debido a que se debe...
mantener la agrupacin fsica (filas con igual valor de clave de
cluster), y a la vez
desaprovechar el mnimo espacio de almacenamiento
muchos encadenamientos entre registros (zonas de desborde, etc.)
menor eficiencia de la bsqueda segn la clave del cluster
reduccin del rendimiento de las consultas

53

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre ndices

Cundo emplear un ndice


La tabla es de tamao medio/grande: Si la tabla es
pequea, resulta ms eficiente cargarlas en
memoria
Las consultas ms frecuentes acceden a pequeos
porcentajes del total de filas (20%): mejor
recorrido secuencial para acceder a muchas filas?
Se desea evitar...

el recorrido de la tabla completa: usamos bsqueda


binaria en el ndice
54

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre ndices

Cundo emplear un ndice


(continuacin) Se desea evitar...
el acceso al fichero para determinadas consultas (EXISTS,
IN, ...) :si el ndice es denso basta con acceder a l para saber
si existe
la ordenacin de los registros en el fichero (ORDER BY, GROUP
BY, UNION, DISTINCT, JOIN):
al crear un ndice primario o de agrupamiento el fichero se almacena ordenado
Al tener un ndice ordenado se puede utilizar para operaciones que impliquen ordenacin

el acceso al fichero para consultas que incluyen un pequeo


subconjunto de columnas: usar ndices compuestos
Sea la tabla PERSONA(nif, nombre, apellido, fecha_nacim, ciudad, telef)
55
CREATE INDEX idx_persona ON PERSONA( apellido, nombre );

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre ndices

Cundo indexar una columna


Es una clave
Muy usada en condiciones de reunin o de seleccin

Suele aparecer en clusulas WHERE en comparaciones de igualdad


o rango de valores: =, >, <, , , BETWEEN
Suele ser columna de reunin (join) de tablas (ej. claves ajenas)
Tiene gran variedad de valores (ms discriminacin en
bsquedas)
No es modificada muy a menudo

Emplear un ndice compuesto si habitualmente se


accede por medio de varias columnas utilizadas
conjuntamente
El SGBD slo usar el ndice para consultas que incluyan (en WHERE)
condiciones sobre campos que forman un prefijo de la clave de
indexacin
56

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre ndices

Cundo evitar un ndice


La tabla es muy pequea: cargarla en memoria
Sobre columnas...

modificadas muy a menudo


con distribucin irregular de valores: confunden al Optimizador
que slo aparecen en funciones/operadores
(distintos de MAX o MIN): pueden hacer que el ndice no se use

Se degradan los requisitos de procesamiento crtico: si se le


da al SGBD muchos ndices a elegir
El costo(almacenamiento+mantenimiento)
beneficio

>

INSERT, UPDATE, DELETE sobre tablas indexadas


mantenimiento del ndice (automtico, por parte del SGBD)
A veces conviene...
crear la tabla, rellenarla, y luego crear los ndices
eliminar ndices, modificar datos y crear de nuevo los ndices
57

Seleccin de la organizacin de ficheros y


estructuras de acceso
Sobre ndices
Consejos para la utilizacin de ndices
Mximo 4 ndices por tabla
ndices necesidad de espacio y velocidad al modificar
el SGBD puede crear implcitamente ndices sobre las claves

Se puede crear ms, si es raro actualizar la tabla (histrico)


Almacenar ndices secundarios en un espacio de
almacenamiento distinto al de los datos
Recomendacin para aplicaciones con muchas INSERT y DELETE
ndices primario o de agrupamiento en el mismo rea que los datos
La mayora de SELECT y todas las INSERT, DELETE los leen
ndices secundarios en un espacio de almacenamiento diferente
Mejor balanceo de carga: INSERT, DELETE actualizan el ndice
Un ndice Primario o de Agrupamiento no tiene por qu verse modificado con cada
INSERT, DELETE o UPDATE(columnas_indexacin), mientras que uno Secundario con seguridad s
deber ser modificado.

58

Ejercicio

Dadas las siguientes situaciones, determinar el mtodo de acceso ms


apropiado (exploracin, cluster, ndices, tabla hash para cada tabla o
conjunto de tablas). Justificar las respuestas.
Tenemos 3 tablas A, B y C, de forma que B y C tienen como clave ajena
un atributo de A. Las consultas son mayoritariamente sobre la tabla
A, pero no a travs de la clave primaria ni de un atributo de
ordenacin. Se estima que las tablas sern de tamao reducido.
Tenemos las 3 tablas del apartado anterior. Las consultas son
mayoritariamente joins sobre el atributo que ejerce como clave ajena
en B y C y como primaria en A. Las consultas individuales sobre cada
tabla individual son irrelevantes.
Tenemos una tabla de 4 atributos con muchas tuplas. Existen muchas
consultas de modificacin del atributo que genera la mejor ordenacin
sobre la tabla.
Tenemos la misma tabla del apartado anterior. Existen dos tipos
mayoritarios de consultas: consultas sobre rangos de valores sobre la
clave primaria y consultas que requieren de la ordenacin de las
tuplas obtenidas.

59

Estructura lgica de una BD


Oracle

60

Estructuras lgicas de
almacenamiento

Segmento
Segmento
Segmento
Segmento

datos
de ndices
de rollback
temporal

SELECT ... ORDER BY...


CREATE INDEX.
SELECT ... GROUP BY...
SELECT ... UNION ...
SELECT DISTINCT ...
SELECT INSERSEC ...
SELECT ... MINUS ...

61

Estructura fsica de Oracle


Ficheros de
datos
Ficheros redo log
Ficheros de
control

62

Entorno de memoria en Oracle


SGA: System/Shared Global Area
Shared pool: library (zona sql, control y bloqueos)
+dictionary (metadatos) cache
Database Buffer Cache
Redo Log Buffer

PGA: Program Global Area

63

Elementos de diseo fsico en


ORACLE
Tablespace
CREATE TABLESPACE TS_DATOS
DATAFILE /disco1/fichero1 SIZE 100 M,
DATAFILE /disco2/fichero2 SIZE 250 M;

Tablas y extensiones
CREATE TABLE Alumnos () TABLESPACE TS_DATOS
PCTFREE 20 PCTUSED 40
STORAGE (INITIAL 20K NEXT 30K MINEXTENTS 1
MAXEXTENTS 10 PCTINCREASE 0);

64

Elementos de diseo fsico en


ORACLE
ndices (dentro de create table)
.
CREATE INDEX nom_ind ON Alumnos (atributos)
.

Clusters
CREATE CLUSTER CL_1(clave number(4)) SIZE 512
TABLESPACE TS_DATOS PCTFREE 20 STORAGE(..);
CREATE TABLE Alumno (.) CLUSTER CL1_(a1);

65

Clusters
CREATE CLUSTER Emp_Dept (departamento CHAR(4)) SIZE 512;
CREATE TABLE Departamento {
codigo CHAR (4) PRIMARY KEY,

) CLUSTER Emp_Dept(codigo);
CREATE TABLE EmpleadoFijo {
nss CHAR(12) PRIMARY KEY,
.
dpto CHAR (4) NOT NULL REFERENCES Departamento(codigo)

) CLUSTER Emp_Dept(dpto);
CREATE INDEX

idx_Emp_Dpt ON CLUSTER Emp_Dept;

66

Dispersin
CREATE CLUSTER Direcciones (codpostal
NUMBER(5))
SIZE 2k
HASH IS MOD(codpostal, 101)
HASHKEYS 1000;

67