Vous êtes sur la page 1sur 44

Optimizacin de

Consultas
Docente: Maria Hurtado Calle

Introduccin

La complejidad de una consulta realizada a la base

de datos por medio del lenguaje SQL, puede tomar


un tiempo considerable obteniendo no siempre
una respuesta ptima para el usuario final.
Es en este momento donde se realiza las
siguientes preguntas:
Por qu optimizar las consultas?
Qu es la optimizacin de consultas?

Introduccin
Por qu optimizar las consultas?

Porque necesitamos mejorar los tiempos de respuesta


en un sistema de gestin de base de datos relacional y
as tambin que la aplicacin muestre peticiones de
respuesta inmediata a los usuarios finales.
Qu es la optimizacin de consultas?

La optimizacin en el proceso de modificar un sistema

para mejorar su eficiencia o tambin el uso de los


recursos disponibles (como CPU).

Definiciones a recordar
Consultas SQL: Son las consultas realizadas a la base
de datos por medio del lenguaje SQL y dependiendo
de la respuesta podemos obtener: muchos datos,
pocos datos, algn dato o ningn dato.
Instrucciones SQL: Usando el lenguaje SQL podemos
comnmente usar: Select, From, Where, Order by,
Group by, insert, delete, etc. Donde cada una de ellas
genera tiempos de ejecucin y tienen un tiempo de
ejecucin.

Definiciones a recordar

Tupla: Es un registro o fila de la tabla.


Relacin : Es un conjunto de tuplas.
ndices: Son campos que permiten realizar bsquedas en las
bases de datos.

Son la parte importante a la optimizacin de consultas.

Proceso de Optimizacin

El Proceso de Optimizacin de consultas tiene


los cuatro puntos importantes.

Representacin interna de consultas.


Conversin a forma cannica.
Eleccin de procedimientos de bajo nivel.
Generacin y eleccin de planes de consultas.

Proceso de Optimizacin
Representacin interna de consultas.

Su

caracterstica principal es que la base de datos debe ser relacionalmente


completo, es decir que para obtener informacin de esta, el usuario pueda
navegar completamente por toda la Base de Datos sin ninguna dificultad.
Conversin a forma cannica.

Al

realizar la optimizacin de consulta puede que se haya optimizado la


consulta pero puede que esta no sea la mejor respuesta al ejecutarlo (es decir
podra tomar mas tiempo de ejecucin que antes de optimizarlo)

EL rendimiento o tiempo de respuesta debe ser el mas optimo o mejor en este


nivel.

Proceso de Optimizacin
Eleccin de procedimientos a bajo nivel.

Implica la evaluacin de la consulta previamente transformada


anterior es decir la verificacin de la consulta optimizada.

en el punto

Generacin y eleccin de planes de consultas.

Un

plan de consulta es la verificacin de costos que implica en la base de


datos los costos de comunicacin, costos de procedimientos, costos de
ejecucin.
Ejemplo: Es decir si tenemos una consulta para realizar la bsquedas
de algn dato en una tabla donde tenemos 15000 registros, debemos tomar
en cuenta cual es costo de ejecucin de esta consulta.

Una consulta que tarda 6 segundos en su tiempo de respuesta y que con la


nueva optimizacin tarde 15 segundos esto ya implica un costo de ejecucin.

En

optimizacin de querys los costos de optimizacin de consultas deben


generar un tiempo de ejecucin mnimo.

Tiempos de ejecucin

Una

consulta a una tabla especifica en una base de datos


determinada nos da diferentes tiempos de ejecucin
dependiendo de la cantidad de usuarios que estn accediendo
a esta misma tabla.

Tiempos de ejecucin
Que acceda un usuario el tiempo de respuesta ser inmediata
pero que accedan 2000 usuarios ya el tiempo de ejecucin
tomara mas tiempo.

Dependiendo

de la cantidad de usuarios que accedan a esta


misma consulta pueden llegar a colapsar la base de datos o la
misma aplicacin cual seria totalmente incorrecto.

Cmo ayudan a optimizar los tiempos de ejecucin?


Costos de comunicacin.
Costos de almacenamiento.
Costos de procesamiento.

Tiempos de ejecucin
Ejemplo:
En una entidad bancaria Banco Unin donde tiene diferentes
sucursales y cientos de personas que realizan un sin fin de
transacciones desde pagar una cuenta hasta realizar
transferencias.
El simple hecho que cada persona sea atendido y el tiempo que
se toma en responder una aplicacin (y por debajo la base de
datos) a una determinada bsqueda, en este caso el nombre de la
Persona puede llegar a tomar mucho tiempo y por ende terminar
en una desconformidad del usuario por la excesiva demora en su
atencin.

Tiempos de ejecucin

Mejores practicas para optimizacin


de consultas
No utilizar el SELECT *.
En un SELECT seleccionar solo los campos que se necesitan.
Utilizar el INNER, LEFT, RIGHT JOIN.
Definir el ALIAS a las tablas en el SELECT.
Evitar el Cast y formulas dentro de la consulta SQL.
El orden del FROM debe ir de la tabla de menor registros a mayor.

Mejores practicas para optimizacin


de consultas
Pasos a seguir para optimizar una consulta:
Identificar las consultas lentas que estn tomando mucho tiempo
de ejecucin.

Una vez que estn identificadas las consultas es verificar porque


estas consultas son lentas o tienen un tiempo de respuesta
extensa.

Usar el comando explain que muestra el plan de ejecucin de la


consulta.

Mejores practicas para optimizacin


de consultas
Pasos a seguir para optimizar una consulta:
Comando explain que muestra el plan de ejecucin de la
consulta para los diferentes SGBD.

Mejores practicas para optimizacin


de consultas
Ejemplo 1 (Indice):

Se tienen dos tablas donde la


relacin es (1,n) y la consulta actual ejecutada en el SGBD
es lenta.

-Un Pas puede tener varias ciudades.


-Una ciudad solamente puede pertenecer a un Pas.

Mejores practicas para optimizacin


de consultas

Mejores practicas para optimizacin


de consultas

La consulta en color verde en la consulta actual (cual es lenta).


El comando explain nos retorna una tabla, donde indica que

pasos

esta realizando el SGBD.


Los elementos mas importantes son las dos ultimas columnas de cada
fila.
Las dos ultimas columnas de la primera fila nos indica que el SGBD
nos trajo un registro usando un ndice

Mejores practicas para optimizacin


de consultas

Un

ndice es una de las maneras mas rpidas para traer


informacin dentro de un SGBD.

Internamente

esta usando estructura de datos complejas


como hashtables, etc.

Mejores practicas para optimizacin


de consultas

Un ndice se comporta como un directorio de paginas blancas o las agendas telefnicas de

COMTECO.
Pensemos en que nos preguntan cual es el numero de telfono de Tiofilo Gonzales.
Rpidamente vamos a la agenda telefonica y buscamos por apellidos que empiecen por G,
donde buscamos todos los Gonzales y despus todos los Tiofilo y se devuelve para este caso
el 111-1111.
Es de esta manera como funciona el ndice.

Mejores practicas para optimizacin


de consultas
Continuando con el mismo ejemplo, el SGBD busca los

registros que comiencen con VEN y devuelve una sola fila.

Mejores practicas para optimizacin


de consultas
Las dos ultimas columnas de la segunda fila nos indica que el
SGBD nos trajo 4079 registros y no esta usando un ndice.

Mejores practicas para optimizacin


de consultas

Mejores practicas para optimizacin


de consultas

Similar al caso anterior el manejador esta manejando una bsqueda secuencial,


comenzando por la A y pregunta la ciudad de Aachen tiene como cdigo de
pas VEN y este devuelve no.

Y as se hace el recorrido con cada registro de la tabla hasta 4079 veces.


SOLUCION: Para mejorar esta consulta creamos un ndice en el campo donde
estamos buscando con la siguiente instruccin:

Mejores practicas para optimizacin


de consultas
Ahora en lugar de buscar secuencialmente los registros,
solamente traer los registros de Venezuela.

Actualmente esta leyendo 3 registros en lugar de 4079 y se


ahorro algunos segundos de procesamiento

Mejores practicas para optimizacin


de consultas
Ejemplo 2 (Indice)

Mejores practicas para optimizacin


de consultas
Los ndices fueron creados en sus llaves primarias

Producto: (PK) id_producto


Etiqueta: (PK) id_etiqueta
ProductoxEtiqueta: (id_producto, id_etiqueta) // es un ndice compuesto

En la siguientes consultas cual de las consultas son las mas


optimas?

Mejores practicas para optimizacin


de consultas

Mejores practicas para optimizacin de


consultas
La respuesta es:

La primera consulta es la mas optima, porque una esta usando ndice y


la otra no.

El orden como se crean los ndices es muy importante para este caso.

Como la consulta de la izquerda usa el id_producto primero,


entonces esta hace uso del ndice.

Debemos tomar en cuenta que cuando la tabla ProductoxEtiqueta


fue creada en sus atributos el primer ndice a ser creado fue
id_producto y luego id_etiqueta.

NOTA: No importa que este usando la llave compuesta con tal que use el
primero en esta secuencia.

Mejores practicas para optimizacin


de consultas
La consulta derecha no hace uso del ndice dado que usa

id_etiqueta primero y en nuestra tabla relacional


ProductoxEtiqueta no hay un ndice que establezca como
primer campo.

Mejores practicas para optimizacin


de consultas
Cmo solucionar este problema?

Es crear un nuevo ndice, donde el primer ndice ser id_etiqueta.

Mejores practicas para optimizacin


de consultas
Ejemplo 3: Sub- consultas o consultas anidadas.
Es otro mtodo usado por los programadores, pero si estn
no se realizan de manera correcta pueden causar tiempos
de respuesta largos en sus consultas.
Relacion 1,,n entre Orden y Producto
- Una orden puede tener varios productos

Mejores practicas para optimizacin


de consultas
Realizar

una consulta para obtener el producto mas caro que


esta en una orden.

Existen

dos maneras de hacer esta consulta, y las dos traen


la misma respuesta.

Mejores practicas para optimizacin


de consultas

Las dos realizan la misma consulta con la diferencia que:

La consulta del lado izquierdo realiza una sub-consulta, en la seccin


del SELECT.

La consulta del lado derecho realizan un INNER JOIN.

Para

efecto de ambas consultas, ya los ndices estn


optimizados.

Cuando

usamos el comando explain en ambas consultas,


obtenemos la siguiente respuesta.

Mejores practicas para optimizacin


de consultas

Por la respuesta obtenida la consulta del lado izquierdo tomo mucho mas
tiempo el de la derecha.

Por qu ?

La consulta del lado izquierdo tiene que ejecutar la sub-consulta cada vez
que se obtiene un nuevo producto.

Suponiendo que tenemos un milln de productos, entonces la subconsulta se ejecuta un milln de veces.

Mejores practicas para optimizacin


de consultas

La

consulta del lado derecho, se ejecuta siempre a


travs de dos consultas:

Una consulta sobre producto


Y otra consulta sobre orden
Y luego viene la unin de ambas

Mejores practicas para optimizacin


de consultas
Cmo podemos mejorar las consultas como
programador/desarrollador?

Cuando desarrollen consultas no lo hagan pensando como un

programador procedimental. (Tratar de pensar NO procedimental.)

En SQL bsico no existen estructuras como for, while, repeat. Traten


de hablar en lenguaje SQL.

Hacer uso de JOINs cuando sea posible.


Intentar NO usar consultas anidadas.
Cuando no sea posible usar consultas anidadas, usar una consulta
anidada en el FROM.

No colocar consultas anidadas en el SELECT ni en el WHERE.

Mejores practicas para optimizacin


de consultas
En el siguiente ejemplo se esta creando una tabla temporal
llamada mi orden como consulta anidada.

Mejores practicas para optimizacin


de consultas

Continuando con otros tips:

Primero: Hacer un buen esquema/modelo (normalizado) de base de datos.


Modelar la base de datos desde lo mas sencillo y despus normalizar.

Una vez que se

termino de normalizar se puede comenzar a desnormalizar si hay necesidad (no es

obligatorio).

Ejemplo: Tenemos una tabla CLIENTE, donde tiene atributos que no se utilizan mucho pero que si
son necesarios.

Entonces lo que se puede hacer es crear otra tabla relacionada a CLIENTE con un cardinalidad (1,1).
Esto a la hora de realizar consultas nos ahorra tiempo de lectura, espacio en memoria ambas
importantes para la rapidez de la consulta.

Mejores practicas para optimizacin


de consultas

Continuando con otros tips:

Otra

manera de mejorar la velocidad en la base de datos es realizar los


clculos en una hora especifica del da, preferiblemente la noche y poner estos
resultados en un campo.
Ejemplo: Supongamos que queremos saber en la UAB por facultad todos los
promedios de los estudiantes y segn a su nota lleven una posicin (es decir
1,2,3, n posicin).

Para realizar este requerimiento se necesita saber todos los estudiantes activos
por facultad.

Se

necesita obtener todas las notas por cada estudiante, y a estas se deben
aplicar unas formulas y por ultimo se deben ordenar de mayor a menor.

Mejores practicas para optimizacin


de consultas
Continuando con otros tips:

En

vez de hacer estos pasos cada vez que se solicita este


requerimiento, lo que se hace es ejecutar esta consulta en la
noche una sola vez y los datos se guardan en un campo para
todos los estudiantes.

Luego

cuando alguien requiera saber las posiciones de los


estudiantes, simplemente se lee el campo.

Por ultimo, el tiempo que se ahorra en este proceso es inmenso.

Mejores practicas para optimizacin


de consultas

Continuando con otros tips:

Usa los tipos de datos o estructura de datos adecuados:


No utilizar una VARCHAR(50) para almacenar un Carnet

de Identidad, donde las

cedulas son hasta mximo de 10 dgitos.

Mas caracteres implican mas espacio para los ndices, mas espacio para
almacenar, mas espacio para leer, mas espacio en memoria, y todo esto se
traduce en lentitud.

Otro punto importante para mejorar la velocidad es usar las instrucciones del SGBD que
estamos usando, buscar en su manual o google cuales son las mejores instrucciones que
otras para el manejador.

Mejores practicas para optimizacin


de consultas

Mejores practicas para optimizacin


de consultas
Los ndices no funcionan cuando estn siendo usadas dentro una
formula.

Si tenemos un ndice en el campo fecha y usamos la funcin to_days()


sobre fecha, se pierde el uso del ndice.

La manera de mejorar la velocidad es reescribir la consulta, tal que el


ndice no sea usado dentro la funcin.

Vous aimerez peut-être aussi