57 lines
2.0 KiB
Org Mode
57 lines
2.0 KiB
Org Mode
#+title: Autoevaluacion
|
|
#+author: Luca Troiano, Federico Polidoro
|
|
|
|
* Pensar como el motor de BD
|
|
** ¿Cual es el orden lógico de ejecución de esta consulta?
|
|
|
|
#+begin_src sql
|
|
|
|
SELECT *
|
|
FROM vuelos
|
|
WHERE YEAR(fecha_salida) = 2023
|
|
AND destino = 'Madrid'
|
|
ORDER BY hora_salida;
|
|
|
|
#+end_src
|
|
|
|
|
|
Lo que realiza la base de datos es primero traer todos los datos de la tabla, despues los filtra por año, luego por el lugar de destino y finalmente, los ordena por la hora de salida de los vuelos.
|
|
|
|
** ¿Qué operaciones de álgebra relacional están presentes?
|
|
|
|
El filtrado por fecha de salida y el destino, Por lo que utiliza: Seleccion e Interseccion.
|
|
|
|
** ¿Qué parte del WHERE no puede usar índices? ¿Por qué?
|
|
|
|
la parte de la funcion YEAR() porque la funcion se computa en momento de ejecucion. osea no puede usar indice porque el dato a buscar no existe hasta dsps de usar el ~YEAR()~.
|
|
|
|
** ¿Qué pasará si no hay índice sobre destino ni fecha_salida?
|
|
Se tendria que hacer un escaneo de tabla entera para ambos casos.
|
|
|
|
* Pensar como DBA
|
|
** Reescribí la consulta de forma optimizada:
|
|
- Sin SELECT *
|
|
- Evitando funciones en el WHERE
|
|
- Evaluando si ORDER BY es necesario
|
|
|
|
#+begin_src sql
|
|
SELECT destino, origen, fecha_salida, hora_salida, aerolinea, estado
|
|
FROM vuelos
|
|
WHERE fecha_salida >= '2023-01-01' AND fecha_salida <= '2024-01-01'
|
|
AND destino = 'Madrid';
|
|
#+end_src
|
|
|
|
El order by no es necesario, en caso de existir un indice fisico con la hora_salida. También es justificable que como esto se va a usar en un informe no es tan necesario que se ordene en la base de datos.
|
|
|
|
** ¿Qué índice crearías? Justificá:
|
|
Crearia unos en fecha_salida y destino. Esto para optimizar la recuperacion de datos mediante un indice fisico que los ordene a los datos, como por ejemplo, lo haria un ~B-tree~ .
|
|
|
|
** ¿Qué tipo de optimización estás aplicando?
|
|
Estoy utilizando ambos tipos de optimización:
|
|
|
|
- Por costos \\
|
|
Se podria considerar elejir las columnas de las tablas.
|
|
|
|
- Heuristica \\
|
|
Cuando decidimos poner indices en ambas columnas que usamos en el WHERE.
|