Files
2025-05-06 12:56:14 -03:00

2.0 KiB

Autoevaluacion

Pensar como el motor de BD

¿Cual es el orden lógico de ejecución de esta consulta?

SELECT *
FROM vuelos
WHERE YEAR(fecha_salida) = 2023
AND destino = 'Madrid'
ORDER BY hora_salida;

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
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';

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.