Está en la página 1de 34

Sistemas de Datos

Procesamiento y
Optimización de consultas
Material Preliminar – en preparación
Procesamiento y Optimización de consultas
Sistemas de Datos

Optimización SQL

•Identificar sentencias problemáticas


•Verificar las estadísticas
•Revisar los planes de ejecución
•Reestructurar las sentencias SQL
•Reestructurar los índices
•Mantener los planes de ejecución
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE

• Parse
• Bind
• Execute
• Fetch
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Fase de Parse
̈ Busca la sentencia en la memoria compartida
̈ Chequea la sintaxis
̈ Chequea semántica y permisos
̈ Mezcla las vistas y las subconsultas con la
consulta principal
̈ Determina el Plan de Ejecución
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Fase de Bind
̈ Busca en la sentencia variables a reemplazar
̈ Asigna (o reasigna) el valor a las variables
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Fase de Execute
̈ Aplica el Plan de Ejecución
̈ Realiza los I/O y sorts necesarios para la
ejecución de las sentencias DML
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Fase de Fetch
̈ Si se trata de un select, devuelve el resultado
de la consulta.
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Open Close

Parse Bind Execute Fetch

Ante una nueva consulta puede…


Tener que comenzar con el Parse y
continuar con el Bind, Ejecución y Fetch...
O… Poder comenzar con el Bind,
y continuar con la Ejecución y Fetch...
Procesamiento y Optimización de consultas
Sistemas de Datos

Fases de Procesamiento - ORACLE


Para optimizar el uso de la memoria
compartida:
̈ Escribir código genérico
̈ Seguir estándares de codificación
̈ Usar variables a reemplazar en tiempo de
ejecución
Procesamiento y Optimización de consultas
Sistemas de Datos

Estadísticas - SQL SERVER


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - ORACLE


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ Consultas simples de una tabla

SELECT Nombre_Escuela, Domicilio_Escuela


FROM escuela
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


SELECT Nombre_Escuela, Domicilio_Escuela
FROM escuela
ORDER BY Domicilio_Escuela
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


SELECT top 50 PERCENT Nombre_Escuela,
Domicilio_Escuela
FROM escuela
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


SELECT Codigo_Guia, SUM(Cantidad_Alumnos_Asistentes *
Arancel_por_Alumno) AS Total_x_Guia
FROM dbo.reserva_visita
GROUP BY Codigo_Guia

Primero realiza un ordenamiento y luego agrupa los datos


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ Consultas multitablas
SELECT ESC.Nombre_Escuela, ESC.Domicilio_Escuela, TEL.Telefono_Escuela
FROM escuela ESC INNER JOIN telefono_escuela TEL ON ESC.Codigo_Escuela
= TEL.Codigo_Escuela
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


SELECT ESC.Nombre_Escuela, ESC.Domicilio_Escuela,
TEL.Telefono_Escuela
FROM escuela ESC LEFT JOIN telefono_escuela TEL ON
ESC.Codigo_Escuela = TEL.Codigo_Escuela
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ Utilización de índices
̈
Agrupados
SELECT Codigo_Guia
FROM guia
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ No Agrupados

SELECT Cantidad_Alumnos_Reservada
FROM reserva_visita
GROUP BY Cantidad_Alumnos_Reservada

CREATE
INDEX [idx_cant_reservas]
ON reserva_visita
([Cantidad_Alumnos_Reservad
a])
WITH
DROP_EXISTING
ON [PRIMARY]
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ Sin índice

SELECT Codigo_Guia
FROM guia

Le sacamos la
clave primaria
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ INNER JOIN vs WHERE vs IN
̈ INNER JOIN

SELECT REV.Codigo_Guia
FROM reserva_visita REV INNER JOIN
reserva_visita_grado RVG ON
REV.Codigo_Reserva = RVG.Codigo_Reserva
WHERE RVG.GRADO=3
GROUP BY REV.Codigo_Guia
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ WHERE

SELECT REV.Codigo_Guia
FROM reserva_visita REV ,
reserva_visita_grado RVG
WHERE RVG.GRADO=3 AND REV.Codigo_Reserva
= RVG.Codigo_Reserva
GROUP BY REV.Codigo_Guia
Procesamiento y Optimización de consultas
Sistemas de Datos

Plan de Ejecución - SQL SERVER


̈ IN

SELECT REV.Codigo_Guia
FROM reserva_visita REV
WHERE REV.Codigo_Reserva IN(
SELECT RVG.Codigo_Reserva
FROM reserva_visita_grado RVG
WHERE RVG.GRADO=3)
GROUP BY REV.Codigo_Guia
Procesamiento y Optimización de consultas
Sistemas de Datos

Indices
•Los índices no guardan los valores nulos, con lo
que una búsqueda del tipo “...Where xx is null”
nunca utilizará un índice sobre xx
•Búsquedas de rangos en índices asociativos
•Búsquedas sólo sobre la/s columnas del índice
no requieren ir a la tabla
•Nuevos valores sobre índices bitmap -> Costo
de inserción
Procesamiento y Optimización de consultas
Sistemas de Datos

Indices
•Costo en performance cuando se añaden,
borran o actualizan valores del índice
•Las actualizaciones son las operaciones más
costosas porque implican un borrado y una
inserción en el índice
•Los índices sobre claves primarias rara vez sufren
actualizaciones, lo que lleva a pocas actualizaciones sobre
índices sobre claves foráneas.

•Algunos índices existen por razones que no


tienen que ver con la performance, como
asegurar la unicidad.
Procesamiento y Optimización de consultas
Sistemas de Datos

Acceso Full Table

•No existe índice por la clave de búsqueda

•La consulta va a retornar una gran


cantidad de datos (ejemplo > 20% de las
filas)

•Tablas pequeñas
Procesamiento y Optimización de consultas
Sistemas de Datos

Acceso por Indice

Existe índice por la clave de búsqueda y la


consulta va a retornar una pequeña
cantidad de datos (ejemplo < 0.5% de las
filas)
Procesamiento y Optimización de consultas

Acceso
Sistemas de Datos

por índice - Tipos de búsqueda


•De un valor único
•De rangos
•Descendentes
•Index Skip -> En índices de más de una columna.
Este tipo de búsqueda saltea (skip) la/s columna/s que
no forman parte de la búsqueda y parte el índice en
subíndices más pequeños. La cantidad de subíndices
está determinado por la cantidad de valores de la/s
columna/s salteadas
Procesamiento y Optimización de consultas
Sistemas de Datos

Joins
•Bucle anidados (Nested-loops joins)
Procesamiento y Optimización de consultas
Sistemas de Datos

Joins
•Asociativos (hash join)
Procesamiento y Optimización de consultas
Sistemas de Datos

Joins
•Reunión por mezcla (sort-merge join)

También podría gustarte