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)