Universidad de Chile
Departamento de Ciencias de la Computación
CC3201 - Bases de Datos
Laboratorio 7 - Optimización de Consultas
Profesor: Aidan Hogan
Auxiliar: Sebastián Ferrada
Se cuenta con la siguiente estructura:
Pelicula(nombre:string, anho:int, calificacion:float, votos:int)
Actor(nombre:string, genero:char)
Personaje(a nombre:string, p nombre:string, p anho:int, personaje:string)
En la base de datos hay dos esquemas en el servidor del curso: uno con los datos indexados
y otro sin ı́ndices. En cada esquema está la estructura tres veces: en la primera se encuentran los
datos para pelı́culas con más de 10.000 votos, en la segunda los datos de pelı́culas con más de 1.000
votos y en la tercera para las pelı́culas con más de 100 votos.
En el laboratorio, usted deberá medir el efecto de utilizar ı́ndices en consultas complejas y
deberá contrastar los resultados prácticos con los teóricos. Ud. debe entregar un breve reporte (en
pdf) con sus respuestas.
P1. Usando el esquema lab7 cuente las tuplas de las tablas presentes. Debe notar que las tablas
10k tienen menos tuplas que las 1k y muchas menos que las 100. Registre sus resultados.
En el esquema lab7 index explore los ı́ndices que están a su disposición usando \d+ tabla.
Recuerde que postgres agrega un indice para la llave primaria por defecto, entonces lab7 sólo
tiene esos indices.
P2. Use la consulta detallada más adelante. Ejecútela en los esquemas lab7 y lab7 index. Uti-
lizando EXPLAIN ANALYZE obtenga los planes de consulta y tiempos de ejecución. Registre
estos datos e indique cantidad de queries por segundo que pueden realizarse y la cantidad de
registros accedidos en cada uno de los esquemas.
SELECT * FROM personaje100 WHERE p nombre=’Pulp Fiction’
P3. Seleccione tres consultas complejas: una que use una consulta por rango (mientras más pequeño
el rango, más se beneficia la consulta del indexamiento) una que requiera joins y una que utilice
consultas anidadas. Para cada consulta ud. debe:
Ejecutar las consultas en el esquema lab7 usando las tablas terminadas en 10k, 1k y 100
usando EXPLAIN ANALYZE y registre los tiempos.
Ejecutar las consultas en el esquema lab7 index usando las tablas terminadas en 10k,
1k y 100 usando EXPLAIN ANALYZE y registre los tiempos. Note que es impresindible que
su consulta utilice alguno de los ı́ndices proporcionados (es decir, no los ı́ndices por
defecto de las llaves primarias), sino deberá seleccionar otra consulta.
1
Universidad de Chile
Departamento de Ciencias de la Computación
CC3201 - Bases de Datos
Figura 1: Gráfico de ejemplo: se muestran las curvas para las consultas con y sin ı́ndices y cómo
varia el tiempo de ejecución respecto al tamaño de las tablas.
Muestre gráficamente (usando la herramienta que estime conveniente) cómo varı́a el tiem-
po de ejecución respecto al tamaño de las tablas, tanto en la versión sin ı́ndices, como en
la versión indexada. Puede ver un ejemplo del gráfico esperado en la Fig. 1.
En su reporte entonces debe mostrar los datos recolectados en P1 y P2 y además, para cada
consulta:
El SQL de la consulta
La planificación de la consulta con y sin ı́ndices
El gráfico de comparación
La cantidad (aprox.) de registros visitados en la base de datos más grande para ambos
casos