Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EJERCICIO 11: Vuelos y compaas con la reserva mas cara. Parte II.
Dada la siguiente consulta de distintos vuelos del ejercicio 4: select c.CN_COMP compania, v.AER_ID_AERO origen, v.AER_ID_AERO_DESTINO destino, max(r.importe) from vuelos v, companias c, reservas r where v.id_vuelo=r.vue_id_vuelo and r.importe in (select max (importe) from reservas where vue_id_vuelo=v.id_vuelo) and v.comp_id_comp=c.id_comp and v.comp_id_comp='KLM' and v.aer_id_aero='BCN' group by c.CN_COMP, v.AER_ID_AERO, v.AER_ID_AERO_DESTINO;
Obtenemos los siguientes resultados: 2 ordenacin en memria 0 ordenacin en disco estimacin = 323 Coste duracin 2 segundos Mediante el siguiente plan de ejecucin:
Execution Plan ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=323 Card=1 Bytes=30) 1 0 SORT (GROUP BY) (Cost=323 Card=1 Bytes=30) 2 1 VIEW (Cost=322 Card=1 Bytes=30) 3 2 FILTER 4 3 SORT (GROUP BY) (Cost=322 Card=1 Bytes=63) 5 4 HASH JOIN (Cost=305 Card=2075 Bytes=130725) 6 5 HASH JOIN (Cost=164 Card=664 Bytes=31872) 7 6 NESTED LOOPS (Cost=44 Card=212 Bytes=8480) 8 7 TABLE ACCESS (BY INDEX ROWID) OF 'COMPANIAS' (Cost=1 Card=1 Bytes=18) 9 8 INDEX (UNIQUE SCAN) OF 'COMP_PK' (UNIQUE) 10 7 TABLE ACCESS (FULL) OF 'VUELOS' (Cost=43 Card=1 Bytes=22) 11 6 TABLE ACCESS (FULL) OF 'RESERVAS' (Cost=110 Card=171113 Bytes=1368904) 12 5 TABLE ACCESS (FULL) OF 'RESERVAS' (Cost=110 Card=171113 Bytes=2566695)
Las funciones analticas permiten realizar subdivisiones en lo que se considera SQL WINDOWS. El tratamiento de cada fila se realiza en base a la particin afectada. El uso de funciones analticas mejora el procesamiento de SQL con subconsultas que resuelven funciones de grupo como MAX, MIN, AVG, ROW_NUMBER, etc.
Execution Plan ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=177 Card=664 Bytes=24568) 1 0 SORT (UNIQUE) (Cost=177 Card=664 Bytes=24568) 2 1 WINDOW (SORT) (Cost=177 Card=664 Bytes=24568) 3 2 HASH JOIN (Cost=164 Card=664 Bytes=24568) 4 3 NESTED LOOPS (Cost=44 Card=212 Bytes=6148) 5 4 TABLE ACCESS (BY INDEX ROWID) OF 'COMPANIAS' (Cost=1 Card=1 Bytes=14) 6 5 INDEX (UNIQUE SCAN) OF 'COMP_PK' (UNIQUE) 7 4 TABLE ACCESS (FULL) OF 'VUELOS' (Cost=43 Card=1 Bytes=15) 8 3 TABLE ACCESS (FULL) OF 'RESERVAS' (Cost=110 Card=171113 Bytes=1368904)
cpu elapsed disk query current -------- ---------- ---------- ---------- ---------0.00 0.03 0 0 0 0.00 0.01 0 0 0 0.45 6.17 8052 8100 0 -------- ---------- ---------- ---------- ---------0.45 6.22 8052 8100 0
Resumen de la prctica.
Oracle ofrece un conjunto de funciones analticas para mejorar las ejecuciones de subconsultas en los clculos de subtotales en agrupaciones internas complejas. Las funciones analticas siguen la siguiente estructura:
La subdivisin de registros se define en la clusula de particin, y la funcin se aplica para cada fila al grupo de esta subdivisin. En base a la premisa anterior, ATENCIN A LOS DUPLICADOS. En una subdivisin de 10 elementos, calcular el mximo de la particin devolvera 10 filas iguales aunque los clculos sean correctos. Cada particin puede implicar un rea de almacenamiento aparte y cada clusula ORDER BY dentro de cada funcin puede implicar una ordenacin adicional. Es preciso la comprensin de la ejecucin y, a su vez, el SQL convencional necesario para su ejecucin. La clusula ORDER BY es obligatoria en algunas funciones analticas. p.e. row_number()