Análisis y Optimización de consultas

Anuncio
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
Parse
Close
Bind
Execute
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...
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
por índice - Tipos de búsqueda
Sistemas de Datos
•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)
Descargar