Está en la página 1de 4

Uso de denormalizaciones.

EJERCICIO 9: Datos de clientes con importe medio y total de reservas.


Dada la siguiente consulta: SELECT NIF , NOMBRE , APELLIDOS , CN_CIUDAD CIUDAD, CN_PAIS PAIS, CN_SEXO SEXO, CN_EL ESTADOLABORAL, CN_EC ESTADOCIVIL, AVG(IMPORTE) MEDIA, SUM(IMPORTE) TOTAL FROM CLIENTES, PAISES, CIUDADES, SEXOS, ESTADOSLABORALES, ESTADOSCIVILES, RESERVAS WHERE PAI_ID_PAIS= ID_PAIS AND CIU_ID_CIUDAD= ID_CIUDAD AND SEX_ID_SEXO= ID_SEXO AND EL_ID_EL=ID_EL AND EC_ID_EC=ID_EC AND CLI_NIF=NIF GROUP BY NIF , NOMBRE , APELLIDOS , CN_CIUDAD , CN_PAIS , CN_SEXO , CN_EL , CN_EC;

Obtenemos los siguientes resultados: en devolver 9999 filas 1926 lecturas fsicas 0 ordenacin en memria 1 ordenaciones en disco estimacin = 14405 Coste tiempo = 8 Segundos

Primer paso: Estudio de la ejecucin.


Execution Plan ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=14405 Card=171113 Bytes=19164656) 1 0 SORT (GROUP BY) (Cost=14405 Card=171113 Bytes=19164656) 2 1 HASH JOIN (Cost=365 Card=171113 Bytes=19164656) 3 2 HASH JOIN (Cost=29 Card=9999 Bytes=979902) 4 3 TABLE ACCESS (FULL) OF 'ESTADOSCIVILES' (Cost=2 Card=5 Bytes=50) 5 3 HASH JOIN (Cost=25 Card=9999 Bytes=879912) 6 5 TABLE ACCESS (FULL) OF 'ESTADOSLABORALES' (Cost=2Card=2 Bytes=18) 7 5 HASH JOIN (Cost=21 Card=9999 Bytes=789921) 8 7 TABLE ACCESS (FULL) OF 'SEXOS' (Cost=2 Card=2 Bytes=14) 9 7 HASH JOIN (Cost=17 Card=9999 Bytes=719928) 10 9 HASH JOIN (Cost=5 Card=30 Bytes=600) 11 10 TABLE ACCESS (FULL) OF 'PAISES' (Cost=2 Card=7 Bytes=63) 12 10 TABLE ACCESS (FULL) OF 'CIUDADES' (Cost=2 Card=30 Bytes=330) 13 9 TABLE ACCESS (FULL) OF 'CLIENTES' (Cost=11 Card=9999 Bytes=519948) 14 2 TABLE ACCESS (FULL) OF 'RESERVAS' (Cost=110 Card=171113 Bytes=2395582)

El mayor peso del coste recae sobre la ordenacin causada por la agrupacin GROUP BY. En el caso de que la informacin de esa tabla no sufriera modificaciones en la actualidad, es decir, se tratara de una tabla con informacin histrica, sera conveniente almacenar una copia de la misma con la informacin agrupada. El siguiente cdigo implementa un CREATE TABLE basado en la consulta anterior:
CREATE TABLE MAESTRO_CLIENTES AS SELECT NIF , NOMBRE , APELLIDOS , CN_CIUDAD CIUDAD, CN_PAIS PAIS, CN_SEXO SEXO, CN_EL ESTADOLABORAL, CN_EC ESTADOCIVIL, AVG(IMPORTE) MEDIA, SUM(IMPORTE) TOTAL FROM CLIENTES, PAISES, CIUDADES, SEXOS, ESTADOSLABORALES, ESTADOSCIVILES, RESERVAS WHERE PAI_ID_PAIS= ID_PAIS AND CIU_ID_CIUDAD= ID_CIUDAD AND SEX_ID_SEXO= ID_SEXO AND EL_ID_EL=ID_EL AND EC_ID_EC=ID_EC AND CLI_NIF=NIF GROUP BY NIF , NOMBRE , APELLIDOS , CN_CIUDAD , CN_PAIS , CN_SEXO , CN_EL , CN_EC;

Segundo paso: Comparativa de tiempos y costes.


Sentencia usando CLIENTES
SELECT NIF , NOMBRE , APELLIDOS , CN_CIUDAD CIUDAD, CN_PAIS PAIS, CN_SEXO SEXO, CN_EL ESTADOLABORAL, CN_EC ESTADOCIVIL, AVG(IMPORTE) MEDIA, SUM(IMPORTE) TOTAL FROM CLIENTES, PAISES, CIUDADES, SEXOS, ESTADOSLABORALES, ESTADOSCIVILES, RESERVAS WHERE PAI_ID_PAIS= ID_PAIS AND CIU_ID_CIUDAD= ID_CIUDAD AND SEX_ID_SEXO= ID_SEXO AND EL_ID_EL=ID_EL AND EC_ID_EC=ID_EC AND CLI_NIF=NIF GROUP BY NIF , NOMBRE , APELLIDOS , CN_CIUDAD , CN_PAIS , CN_SEXO , CN_EL , CN_EC cpu elapsed disk query current -------- ---------- ---------- ---------- ---------0.14 0.14 0 0 0 0.00 0.00 0 0 0 0.64 4.15 1985 1265 5 -------- ---------- ---------- ---------- ---------0.78 4.30 1985 1265 5 rows ---------0 0 9999 ---------9999

call count ------- -----Parse 1 Execute 1 Fetch 668 ------- -----total 670

Sentencia usando MAESTRO_CLIENTES


CREATE TABLE MAESTRO_CLIENTES AS SELECT NIF , NOMBRE , APELLIDOS , CN_CIUDAD CIUDAD, CN_PAIS PAIS, CN_SEXO SEXO, CN_EL ESTADOLABORAL, CN_EC ESTADOCIVIL, AVG(IMPORTE) MEDIA, SUM(IMPORTE) TOTAL FROM CLIENTES, PAISES, CIUDADES, SEXOS, ESTADOSLABORALES, ESTADOSCIVILES, RESERVAS WHERE PAI_ID_PAIS= ID_PAIS AND CIU_ID_CIUDAD= ID_CIUDAD AND SEX_ID_SEXO= ID_SEXO AND EL_ID_EL=ID_EL AND EC_ID_EC=ID_EC AND CLI_NIF=NIF GROUP BY NIF , NOMBRE , APELLIDOS , CN_CIUDAD , CN_PAIS , CN_SEXO , CN_EL , CN_EC call count ------- -----Parse 1 Execute 1 Fetch 0 ------- -----total 2 cpu elapsed disk query current -------- ---------- ---------- ---------- ---------0.14 0.15 0 0 0 0.57 5.48 1985 1284 220 0.00 0.00 0 0 0 -------- ---------- ---------- ---------- ---------0.71 5.63 1985 1284 220 rows ---------0 9999 0 ---------9999

select * from maestro_clientes call count ------- -----Parse 1 Execute 1 Fetch 668 ------- -----total 670 cpu elapsed disk query current -------- ---------- ---------- ---------- ---------0.00 0.06 0 0 0 0.00 0.00 0 0 0 0.06 0.23 148 820 0 -------- ---------- ---------- ---------- ---------0.06 0.30 148 820 0 rows ---------0 0 9999 ---------9999

Resumen de la prctica.

Los entornos datawarehouse rompen la normalizacin de tablas debido a que los accesos generalmente se realizan sobre un volumen alto de registros y el uso de ndices es ineficiente en la mayora de los casos. Las tablas no deberan sufrir transacciones y, en caso de recibir un mnimo de modificaciones, es conveniente contemplar la creacin de vistas materializadas. En Oracle no conviene crear tablas intermedias o temporales para realizar consultas en dos partes. El coste de crear la tabla no debera ser despreciado.

También podría gustarte