Sunteți pe pagina 1din 33

OPTIMIZACIN DE CONSULTAS

Jess Torres Alfredo Bello

Alejandro Ovalle

Mtodo de optimizacin Heurstico: basado en el lgebra relacional. Mtodo de optimizacin SQL: basado en estimaciones y datos del esquema que permiten elegir la mejor opcin.

OPTIMIZACIN

Uno de los inconvenientes ms comunes al momento de hacer cubos de informacin, reportes, etc., es el tiempo que tardan las consultas en generar resultados. Esto puede deberse a varios motivos:
Hardware.

Software.
Diseo Motor

modelo de datos (llaves, ndices, relaciones, etc.).

de la base de datos.

Mala

formulacin de las consultas SQL.

OPTIMIZACIN

Normalizar tablas: redundancia.

Se

garantiza

rendimiento

mnima

Ajustar tamao de los campos: ayuda al espacio en disco (en la actualidad no es tan importante pues los tamaos de espacio en servidores actuales son cada vez mayores, sin embargo no hay que dejar de lado esta prctica).

Eliminar campos que no sean de utilidad.


Crear ndices (llaves primarias, forneas, campos de bsqueda, campos de ordenamiento).

MOMENTO DE DISEO DE BASE DE DATOS

Volumen de datos: nmero de tablas y tuplas en la base de datos. Organizacin Fsica: existencia de ndices, agrupamientos. Localizacin: memoria principal, dispositivos externos.

TIEMPO DE ACCESO A DATOS

EJERCICIOS DE OPTIMIZACIN DE SENTENCIAS SQL Problema No. 1 Traer los nombres, apellidos y cdula de los usuarios cuyo primer o segundo nombre es MARIA. Mtodos de optimizacin El uso del comodn todos (*) se debe evitar en lo posible. Resulta ms ptimo en trminos de RENDIMIENTO especificar slo los campos necesarios en la clusula SELECT. En la clusula WHERE, cuando se comparan tipos de datos alfanumricos, es ms natural, debido al mejor nivel de PRECISIN que se logra, usar el operador igual que (=) en lugar de la clusula LIKE.

MALA PRCTICA

SELECT * FROM persona PERS INNER JOIN naturales NATU ON PERS.iden_pers=NATU.iden_pers WHERE nom1_natu LIKE '%MARIA%' OR nom2_natu LIKE '%MARIA%';
DESVENTAJAS DEL ANTERIOR QUERY El sistema devuelve todos los campos de ambas tablas. El sistema trae nombres diferentes a MARIA, tales como: MARIANO, MARIANITA, ETC.

BUENA PRCTICA

SELECT PERS.nume_docu, NATU.nom1_natu, NATU.nom2_natu, NATU.ape1_natu, NATU.ape2_natu FROM persona PERS INNER JOIN naturales NATU ON PERS.iden_pers=NATU.iden_pers WHERE nom1_natu='MARIA' OR nom2_natu='MARIA';
VENTAJAS DEL ANTERIOR QUERY Se recuperan los campos estrictamente necesarios. Se filtran las personas con nombre MARIA.

Problema No. 2 Implementar una consulta tipo JOIN para recuperar la direccin de una persona teniendo como llave nica el nmero de la tarjeta profesional. Mtodos de optimizacin No es recomendable llevar a cabo subconsultas cuando un JOIN puede ser aplicado en su lugar. MALA PRCTICA SELECT domi_dire FROM direccion WHERE iden_pers IN (SELECT iden_pers FROM naturales WHERE tarj_natu='21965');

DESVENTAJAS DEL ANTERIOR QUERY La subconsulta es innecesaria puesto que la tabla que interviene ya posee una llave fornea que describe una relacin padre-hijo entre ambas tablas. La subconsulta genera una sobrecarga que afecta al RENDIMIENTO. BUENA PRCTICA SELECT DIRE.domi_dire FROM naturales NATU INNER JOIN direccion DIRE ON NATU.iden_pers= DIRE.iden_pers WHERE NATU.tarj_natu='21965';

VENTAJAS DEL ANTERIOR QUERY Se aumenta el rendimiento de la consulta. Queda mejor descrito el objetivo de la consulta.

Problema No. 3 Traer el iden_pers del usuario y determinar cuntas direcciones tiene asociadas. Mtodo de optimizacin Los campos a los que se les aplique funciones, debern tener un alias para que cuando se genere el RESULT SET el campo sea fcilmente accesible. Agrupar los resultados por medio de la clusula HAVING, despus de haber agrupado por ORDER BY, es ineficiente en trminos de RENDIMIENTO y CLARIDAD DE LA CONSULTA.

MALA PRCTICA SELECT iden_pers, count(iden_pers) FROM direccion GROUP BY iden_pers HAVING iden_pers!='12455943' AND iden_pers!='12455945' LIMIT 3; DESVENTAJAS DEL ANTERIOR QUERY HAVING es una clusula para funciones de agregados, generalmente se la encuentra ubicada al final del query. Se puede utilizar para agrupar resultados, as que en ciertas ocasiones puede ser reemplazada por una mezcla de WHERE y GROUP BY, y as lograr ms claridad y eficiencia en la consulta.

BUENA PRCTICA SELECT iden_pers, count(iden_pers) numero_pers FROM direccion WHERE iden_pers!='12455943' AND iden_pers!='12455945' GROUP BY iden_pers LIMIT 3; VENTAJAS DEL ANTERIOR QUERY La sentencia es mucho ms clara ahora. Se ha puesto un alias en el filtro count(iden_pers). As se beneficia la lectura del RESULT SET.

Problema No. 4 Recuperar el primer correo electrnico del primer usuario ingresado al sistema. Mtodo de optimizacin Las subconsultas deberan ser pocas, se debe tratar de usar tcnicas como la igualdad por pares. MALA PRCTICA SELECT dire_emai FROM email WHERE iden_pers = (SELECT MIN(iden_pers) FROM email) AND cons_emai = (SELECT MIN(cons_emai) FROM email) AND esta_emai='AC';

DESVENTAJAS DEL ANTERIOR QUERY Hacer una subconsulta por cada parmetro del WHERE resulta inapropiado en cuanto a rendimiento se refiere. BUENA PRCTICA SELECT dire_emai FROM email WHERE (iden_pers, cons_emai) = (SELECT MIN(iden_pers), MIN(cons_emai) FROM email) AND esta_emai='AC'; VENTAJAS DEL ANTERIOR QUERY Se reducen las subconsultas necesarias. Este tipo de mejoras reduce los tiempos de respuesta, debido al enfoque conciso que toma la consulta.

Problema No. 5 Realice una consulta bsica que traiga informacin que permita identificar al usuario. Mtodo de optimizacin No utilice alias cuando la consulta involucre una sola tabla. MALA PRCTICA SELECT NATU.nom1_natu, NATU.nom2_natu, NATU.ape1_natu, NATU.ape2_natu FROM naturales WHERE NATU.iden_pers='2264';

DESVENTAJAS DEL ANTERIOR QUERY El alias es totalmente innecesario para este tipo de queries ya que slo se tiene una tabla como objeto de consulta. BUENA PRCTICA SELECT nom1_natu, nom2_natu, ape1_natu, ape2_natu FROM naturales AS NATU WHERE iden_pers='2264'; VENTAJAS DEL ANTERIOR QUERY Se omite un alias que es totalmente innecesario y puede llegar a confundir y/o generar malas prcticas a los que inician en el mundo del SQL.

Problema No. 5 Traer la informacin bsica de aquellas personas cuyo iden_pers se encuentre entre 2000 y 3000. Mtodo de optimizacin No se debera utilizar los operadores relacionales para evaluar un determinado rango, es mucho ms ptimo implementar la clusula BETWEEN. MALA PRCTICA SELECT PERS.nume_docu, NATU.nom1_natu, NATU.nom2_natu, NATU.ape1_natu, NATU.ape2_natu FROM persona PERS INNER JOIN naturales NATU ON PERS.iden_pers=NATU.iden_pers WHERE PERS.iden_pers >= 2000 AND PERS.iden_pers <= 3000;

DESVENTAJAS DEL ANTERIOR QUERY La consulta se extiende ms de lo necesario, lo cual podra consumir ms memoria. La consulta se hace menos mantenible y confuso. BUENA PRCTICA SELECT PERS.nume_docu, NATU.nom1_natu, NATU.nom2_natu, NATU.ape1_natu, NATU.ape2_natu FROM persona PERS INNER JOIN naturales NATU ON PERS.iden_pers=NATU.iden_pers WHERE PERS.iden_pers BETWEEN 2000 AND 3000; VENTAJAS DEL ANTERIOR QUERY La consulta es ms clara y ms liviana.

GRACIAS POR SU ATENCIN.

S-ar putea să vă placă și