Resolucion Ejercicio 1 Optimizacion.

Anuncio
Base de Datos - Optimización
Resolución ejercicio 1 - Clase Práctica Nº 1 (08/10/2010)
Se tienen las siguientes relaciones:
ALUMNO(nroMatricula, nombre, dirección, localidad, provincia, teléfono, email, fecha_nacimiento, fecha_ingreso, carrera)
INSCRIPCION_CURSADA (codMateria, nroMatricula , fecha_inscr, cuatrim, estado)
Se cuenta además con la siguiente información:
- ALUMNO tiene 5.000 tuplas
- INSCRIPCION_CURSADA tiene 100.000 tuplas
- El tamaño de los bloques es de 4096 bytes
- Cada atributo ocupa 24 bytes
- Hay 100 materias diferentes
- El 20 % de los alumnos ingresaron desde el año 2009 en adelante.
- El 10 % de los alumnos ingresaron en el año 2009
- El 5 % de las inscripciones en cursadas está en estado “Inscripto”
- En la facultad hay 5 carreras.
Ejercicio 1.Dadas las siguientes consultas, se pide para cada una de ellas:
 Generar árbol canónico y analizar su optimización.
 Calcular los bloques necesarios para materializar el output.
 Generar un plan de ejecución y calcular los costos de la evaluación de la consulta para cada uno de los siguientes
escenarios según método de acceso / organización de archivo:
i.Heap
ii. Ordenado según la clave de búsqueda
iii. Índice Hash según la clave de búsqueda, max bloques por balde 4
iv. Árbol B+ no clustered según la clave de búsqueda, altura 3.
v. Árbol B+ Clustered según la clave de búsqueda, altura 3
En los árboles B+, asumir que todos los punteros a datos entran en una hoja.
Las consultas a analizar son:
a) SELECT nombre, dirección
FROM ALUMNO
b) SELECT nombre, dirección
FROM ALUMNO
WHERE nro Matricula = 1520
c) SELECT nombre, dirección
FROM ALUMNO
WHERE fecha_ingreso >= ‘01/01/2009’
1 de 12
d) SELECT nroMatricula, fecha_inscr, estado
FROM INSCRIPCION_CURSADA
WHERE codMateria = 5
RESOLUCIONES
Repasemos…
Archivos Heap: Los archivos Heap son el tipo de archivo más simple, que consiste de una colección desordenada de
registros, agrupados en bloques.
Archivos Ordenados: Los archivos ordenados contienen los registros ordenados de acuerdo a los valores de
determinados campos (la clave de ordenamiento).
Árboles B+ Clustered: son árboles B+ de orden d, ordenados por un conjunto no vacío de campos (clave del índice), para
los cuales el archivo de datos asociado está ordenado en el mismo orden que el índice. En el modelo que usamos
en la materia, los registros de datos no forman parte del índice, es decir, las hojas del árbol tienen punteros al
archivo de datos.
Árboles B+ No Clustered: son similares a los B+ Clustered, salvo que el archivo de datos asociado no está ordenado en el
mismo orden que el índice.
Índice Hash Estático: Están compuestos por una cantidad determinada (fija) de baldes, donde la información asociada a
una clave es ubicada a través de la utilización de una función de hash. Cada balde es una lista encadenada de
bloques, los que se van agregando bajo demanda en la medida en que se completan los bloques previos de ese
balde. En el modelo que usamos en la materia, los registros de datos no forman parte del índice, es decir, los
bloques de cada balde tienen punteros al archivo de datos.
Para entrar en calor…
¿Cuántos bloques ocupan las relaciones?
Veamos los bloques ocupados por ALUMNO…
LA = atribA * Latrib = 10 * 24 bytes =240 bytes
FBA = [LB / LA+ = *4096 / 240+ = *17.06…+ = 17 tuplas por bloque
BA = [TA / FBA]exceso = [5000 /17]exceso = *294.11…+exceso = 295 bloques
Veamos los bloques ocupados por INSCRIPCION_CURSADA…
LIC = atribIC * Latrib = 5 * 24 bytes =120 bytes
FBIC = [LB / LIC+ = *4096 / 120+ = *34.13…+ = 34 tuplas por bloque
BIC = [TIC / FBIC]exceso = [100000 /34]exceso = *2941.17…+exceso = 2942 bloques
 El factor de bloqueo es un concepto muy importante. Notar que si hubiésemos hecho las cuentas sin calcular el
factor de bloqueo (BIC = TIC * LIC / LB), nos hubiese dado otro resultado (por ej, INSCRIPCION_CURSADA: 2930
bloques) que está mal.
2 de 12
EJ 1 a) SELECT nombre, dirección
FROM ALUMNO

Árbol Canónico y posible optimización:
 nombre, direccion
ALUMNO
No se pueden aplicar mejoras algebraicas.

Tamaño del Output
TQ = TA = 5000
LQ = atribQ * Latrib = = 2 * 24 = 48
FBQ = [LB / LQ] = [4096 / 48] = [85,...] = 85
BQ = [TQ / FBQ]exceso = [5000/ 85]exceso = [58,8... ]exceso = 59
Bloques Output = 59

Plan de Ejecución y costo
Hay que recorrer todo el archivo, los índices no aportan nada... El único plan relevante utiliza filescan…
 nombre, direccion
ALUMNO
filescan
filescan
CIQ = CI = BA = 295 accesos
 Recordemos que el cálculo de costos tiene por objeto la comparación entre planes equivalentes, y para ello el
cálculo del output final no es relevante (ya que todos los planes producirán igual salida final). Por eso no
tenemos en cuenta el costo del output final en el cálculo de costo de la consulta.
3 de 12
EJ 1 b) SELECT nombre, dirección
FROM ALUMNO
WHERE nro Matricula = 1520

Árbol Canónico y posible optimización:
 nombre, direccion
 nroMatric=1520
ALUMNO
No se pueden aplicar mejoras algebraicas. Las modificaciones algebraicas aplicables podrían agregar proyecciones a
la salida de los operadores, pero el único operador al que aplicaría (la selección) ya tiene una proyección a
continuación.

Tamaño del Output
TQ = 1
LQ = 48
(calculado en ej. 1a)
FBQ = 85
(calculado en ej. 1a)
exceso
BQ = [TQ / FBQ]
= [1/ 85]exceso = [0,01... ]exceso = 1
Bloques Output = 1
4 de 12

Plan de Ejecución N°1 (usando archivo heap) y costo
Como suponemos que no hay índices disponibles, accederemos a la tupla buscada recorriendo todo el archivo de
datos (recordemos que asumimos peor caso).
 nombre, direccion
pipeline
 nroMatric=1520
ALUMNO
filescan
Calculemos los costos…
CQ = CI + CO + CI
Como CO = CI= 0 (por utilizar pipeline) 
CQ = CI = BA = 295 accesos

Plan de Ejecución N°2 (considerando archivo ordenado según nroMatricula) y costo
Como suponemos que el archivo de datos está ordenado por la misma clave de búsqueda, accederemos a la tupla
buscada mediante búsqueda binaria.
 nombre, direccion
pipeline
 nroMatric=1520
ALUMNO
BusqBin
Calculemos los costos…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = [log2(BA) ]exceso + B’
Como es búsqueda por igualdad sobre una clave candidata, B’ (la cantidad de bloques necesarios para
acceder a todas las tuplas que cumplen la condición) no se considera... luego:
CQ = CI = [log2(BA) ]exceso = [log2(295) ]exceso = [8,2...] exceso = 9 accesos
5 de 12

Plan de Ejecución N°3 (considerando índice hash según nroMatricula) y costo
Llamemos IH al índice hash de ALUMNO sobre nroMatricula.
Como coincide con la clave de búsqueda y se trata de una búsqueda por igualdad, lo utilizaremos para acceder a la
tupla buscada.
 nombre, direccion
pipeline
 nroMatric=1520
ALUMNO
IH
Recordemos que el acceso a datos utilizando índice hash requiere:
o identificar el balde correspondiente a la clave (sin costo, es un cálculo)
o recorrer todos los bloques del balde para encontrar los punteros correspondientes a las tuplas que
coinciden con la clave buscada (asumimos peor caso, por eso recorremos todos)
o acceder a los bloques de datos que contienen las tuplas buscadas. Como asumimos peor caso, se requerirá
acceder a tantos bloques de datos como tuplas busquemos (esto no quiere decir que todos los bloques que
accedamos sean distintos, sólo es una estimación basada en el peor caso posible)
Calculemos el costo…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = MaxBloqXB + T’
De los datos de entrada sabemos que la cantidad de bloques por balde es 4.
Como es búsqueda por igualdad sobre una clave candidata, T’ es 1... luego:
CQ = CI = 4 + 1 = 5 accesos
6 de 12

Plan de Ejecución N°4 (considerando índice B+ No Clustered según nroMatricula) y costo
Llamemos INC al índice B+ No Clustered de ALUMNO sobre nroMatricula.
Como coincide con la clave de búsqueda, lo utilizaremos para acceder a la tupla buscada.
 nombre, direccion
pipeline
 nroMatric=1520
ALUMNO
INC
Recordemos que el acceso a datos utilizando índice B+ No Clusterizado requiere:
o Acceder al nodo hoja del árbol correspondiente a la clave, esto es, bajar en el árbol desde la raíz hasta una
de sus hojas. Cada nodo ocupa un bloque. Tenemos tantos accesos como niveles tenga el árbol.
o Recorrer nodos hoja del árbol para encontrar los punteros correspondientes a las tuplas que coinciden con
la clave buscada (por enunciado, asumimos que todos los punteros a datos correspondientes a una
búsqueda entran en un único nodo hoja, por lo que no hay costo adicional, ya que el primer nodo hoja lo
alcanzamos al bajar en el árbol).
o Acceder a los bloques de datos que contienen las tuplas buscadas. Como asumimos peor caso, se requerirá
acceder a tantos bloques de datos como tuplas busquemos (igual que antes, esto no quiere decir que todos
los bloques que accedamos sean distintos, sólo es una estimación basada en el peor caso posible)
Calculemos el costo…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = H + T’
De los datos de entrada sabemos que la altura de los árboles B+ es 3.
Como es búsqueda por igualdad sobre una clave candidata, T’ es 1... luego:
CQ = CI = 3 + 1 = 4 accesos
7 de 12

Plan de Ejecución N°5 (considerando índice B+ Clustered según nroMatricula) y costo
Llamemos ICL al índice B+ Clustered de ALUMNO sobre nroMatricula.
Como coincide con la clave de búsqueda, lo utilizaremos para acceder a la tupla buscada.
 nombre, direccion
pipeline
 nroMatric=1520
ALUMNO
ICL
Recordemos que el acceso a datos utilizando índice B+ Clusterizado requiere:
o Acceder al nodo hoja del árbol correspondiente a la clave, esto es, bajar en el árbol desde la raíz hasta una
de sus hojas. Cada nodo ocupa un bloque. Tenemos tantos accesos como niveles tenga el árbol.
o Obtener el puntero a la primer tupla buscada (está en el nodo hoja alcanzado al bajar en el árbol, por lo cual
no tiene costo adicional). Este puntero nos permitirá acceder al primer bloque de datos. Como el archivo de
datos también está ordenado por la misma clave que el índice, entonces podremos obtener las tuplas
buscadas recorriendo directamente los bloques contiguos del archivo de datos.
o Acceder a los bloques de datos contiguos que contienen todas las tuplas buscadas. Para simplificar el
cálculo, asumiremos que la primer tupla buscada está al principio de un bloque, con lo cual tendremos que
levantar todos bloques completos, salvo el último que podría estar incompleto…)
Calculemos el costo…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = H + B’
De los datos de entrada sabemos que la altura de los árboles B+ es 3.
Como es búsqueda por igualdad sobre una clave candidata, hay una sola tupla que cumple la condición de
búsqueda, y por lo tanto ocupa un único bloque de datos... luego:
CQ = CI = 3 + 1 = 4 accesos

Resumiendo los costos del ejercicio 1b)...
Heap
Sorted
295 accesos
9 accesos
Hash
5 accesos
B+ No Clustered
4 accesos
B+ Clustered
4 accesos
Pregunta… ¿siempre la utilización del índice B+ Clustered para búsquedas por igualdad de clave da mejores resultados
que la recorrida completa de todo el archivo? ¿Qué pasa con los índices B+ No Clustered o Hash?
8 de 12
EJ 1 c) SELECT nombre, dirección
FROM ALUMNO
WHERE fecha_ingreso >= ‘01/01/2009’

Árbol Canónico y posible optimización:
 nombre, direccion
 fechaIngr >=’01/01/2009’
ALUMNO
Al igual que antes, no se pueden aplicar mejoras algebraicas. Las modificaciones algebraicas aplicables podrían
agregar proyecciones a la salida de los operadores, pero el único operador al que aplicaría (la selección) ya tiene una
proyección a continuación.

Tamaño del Output
TQ = TALUMNO * 20 % 1= 5000 * 20 / 100 = 1000
LQ = 48
(calculado en ej. 1a)
FBQ = 85
(calculado en ej. 1a)
exceso
BQ = [TQ / FBQ]
= [1000/ 85]exceso = [11,76... ]exceso = 12
Bloques Output = 12

Plan de Ejecución N°1 (usando archivo heap) y costo
Como suponemos que no hay índices disponibles, accederemos a las tuplas buscadas recorriendo todo el archivo de
datos (recordemos que asumimos peor caso)
 nombre, direccion
pipeline
 fechaIngr >=’01/’1/2009’
ALUMNO
filescan
1
El 20 % de los alumnos ingresaron desde el año 2009 en adelante.
9 de 12
Calculemos los costos…
CQ = CI + CO + CI
Como CO = CI= 0 (por utilizar pipeline) 
CQ = CI = BA = 295 accesos

Plan de Ejecución N°2 (considerando archivo ordenado según fecha_ingreso) y costo
Como suponemos que el archivo de datos está ordenado por la misma clave de búsqueda, accederemos a las tuplas
buscadas mediante búsqueda binaria.
 nombre, direccion
pipeline
 fechaIngr >=’01/’1/2009’
ALUMNO
BusqBin
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = [log2(BA) ]exceso + B’
B’ es la cantidad de bloques de datos ocupados por las tuplas que cumplen la condición. Vemos esto…
T’ (tuplas que satisfacen la condición) = 1000
L’ = LA = 240 (calculado al principio)
FB’ = FBA = 17 (calculado al principio)
B’ = [T’ / FB’]exceso = [1000/ 17]exceso = [58,82... ]exceso = 59
Luego
CQ = CI = [log2(BA) ]exceso + B’ = [log2(295) ]exceso + 59 = [8,2...] exceso + 59= 68 accesos

Plan de Ejecución N°3 (considerando índice hash según fecha_ingreso) y costo
Los índices Hash sólo son aplicables a búsquedas por igualdad, por lo que en esta consulta no podemos
utilizarlo…
10 de 12

Plan de Ejecución N°4 (considerando índice B+ No Clustered según fecha_ingreso) y costo
Llamemos INC al índice B+ No Clustered de ALUMNO sobre fecha_ingreso.
Como coincide con la clave de búsqueda, lo utilizaremos para acceder a las tuplas buscadas.
 nombre, direccion
pipeline
 fechaIngr >=’01/’1/2009’
ALUMNO
INC
Calculemos el costo…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = H + T’(consideramos que todos los punteros a las T’ tuplas entran en una hoja del índice)
De los datos de entrada sabemos que la altura de los árboles B+ es 3.
Como lo calculamos anteriormente, T’ = (cantidad de tuplas que cumplen la condición) = 1000
Luego:
CQ = CI = 3 + 1000 = 1003 accesos

Plan de Ejecución N°5 (considerando índice B+ Clustered según fecha_ingreso)
Llamemos ICL al índice B+ Clustered de ALUMNO sobre fecha_ingreso.
Como coincide con la clave de búsqueda, lo utilizaremos para acceder a las tuplas buscadas.
 nombre, direccion
pipeline
 fechaIngr >=’01/’1/2009’
ALUMNO
ICL
11 de 12
Calculemos el costo…
CQ = CI + CO + CI
CO = CI= 0 (por utilizar pipeline) 
CI = H + B’
De los datos de entrada sabemos que la altura de los árboles B+ es 3.
Para simplificar el cálculo, asumiremos que la cantidad de bloques B’ = [T’ / FB’]exceso , donde T’ es la
cantidad de tuplas que cumplen la condición y FB’ el factor de bloqueo correspondiente …
B’ = [(T’) / FB’]exceso = [1000/ 17]exceso = 59 (el detalle del cálculo está en un ejercicio previo)
Luego
CQ = CI = H + B’ = 3 + 59 = 62 accesos

Resumiendo los costos del ejercicio 1c)...
Heap
Sorted
295 accesos
68 accesos
Hash
N/A
B+ No Clustered
1003 accesos
B+ Clustered
62 accesos
En este ejemplo se ve claramente que el uso de índices no necesariamente garantiza costos más bajos que la recorrida
completa del archivo…
EJ 1 c) SELECT nroMatricula, fecha_inscr, estado
FROM INSCRIPCION_CURSADA
WHERE codMateria = 5
Queda como ejercicio para ustedes…
12 de 12
Descargar