Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porAurora Caballero Espejo Modificado hace 7 años
1
Implementação e Optimização de Bancos de dados
Banco de Dados II Implementação e Optimização de Bancos de dados Funções agregadas de ventana. Cláusula WITH e Cláusula OVER MsC. Leoder Alemañy Socarrás
2
Bases de Datos Actuales
¿Como crêem vocês que serão os tempos de resposta em consultas que requeiram da execução de subconsultas? ¿Como poderiam melhorar estes tempos de resposta para recuperar a mesma informação?
3
Objetivos Descrever a estrutura e funcionamento das funções agregadas. A cláusula WITH e a cláusula OVER.
4
Resumen Diseño de Bases de Datos: Modelo Entidad – Relación.
Normalización Patrones de diseño Transformación Implementación de Bases de Datos: Lenguaje SQL DML (Select, Insert, Delete, Update) DCL DDL (Create, Drop, Alter) Funciones y Vistas.
5
Resumen Implementación de Bases de Datos: Cláusula SELECT
Select …. (Funciones Agregadas) From ….. Tabla1 INNER JOIN Tabla2…..ON…. Where….. (Subconsultas, LIKE…) Group By Having (condición con funciones agregadas) Order By … ASC….DESC…. Funciones Agregadas: COUNT, AVG, MAX, MIN, SUM
7
Función de Ventana Una función ventana es una función agregada aplicada a una partición o subconjunto del resultado de una consulta, que devuelve un valor por cada fila del resultado. Están disponibles en sistemas gestores de bases de datos como Oracle, SQL Server, Sybase y DB2, pero en ninguna base de datos de código abierto, exceptuando PostgreSQL a partir de la versión 8.4
8
¿Por qué usar funciones ventanas?
Empleado (empid, departamento, salario, edad)
9
Pregunta ¿Qual é a diferença do salário da cada um dos empregados com respeito à média de seu departamento?
10
Solución SELECT e1.empid, e1.departamento, e1.salario, e1.edad,
(SELECT AVG(e2.salario) FROM empleado e2 WHERE e2.departamento=e1.departamento ) as promedio FROM empleado e1;
11
¿É a solução óptima? Esta solución nos mostraría los datos de cada empleado con el promedio de salario del departamento al que él corresponde. Sin embargo con el uso de las "funciones ventanas" la solución sería más simple y los tiempos de respuestas serían menores.
12
Diferencias entre el uso de las funciones ventana y el uso del GROUP BY
Con el GROUP BY obtenemos un resultado con una fila por cada valor diferente del atributo usado en el GROUP BY.
13
Funciones de ventana Uma función ventana devolve um valor pela cada bicha do resultado de uma consulta.
14
Sintaxis de las funciones ventanas
OVER( [PARTITION BY expresion [, ...]] [ORDER BY expression [ASC|DESC][NULLS{FIRST|LAST}][, ...]] [Frame-Clause] )
15
Parámetros Partition by: Realiza la separación lógica de las N clases que componen la partición creada de acuerdo a la expresión definida. Order by: Especifica la manera en que se ordenaran los datos dentro de la clase. Este elemento es de vital importancia en un grupo importante de casos.
16
Cláusula Frame La definición del frame es uno de los elementos más importantes cuando se utilizan funciones de ventana. En el frame se define el conjunto de filas que se tendrán en cuenta para computar el resultado de la función analítica, en aquellos casos en que se opere sobre una parte de los datos y no sobre toda la clase.
17
Sintaxis de Frame-Clause
[ RANGE | ROWS ] frame_start [ RANGE | ROWS ] BETWEEN frame_start AND frame_end Y los valores que pueden ser asignados son los siguientes: UNBOUNDED PRECEDING value PRECEDING CURRENT ROW value FOLLOWING UNBOUNDED FOLLOWING
18
Ejemplo 1 Mostrar el empid, departamento, salario, edad y el promedio de los salarios por departamento, para poder realizar la comparación. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento) AS promedio FROM empleado;
19
Resultados Mostrar el empid, departamento, salario, edad y el promedio de los salarios por departamento, para poder realizar la comparación.
20
Ejemplo 1.1 Mostrar el empid, departamento, salario, edad, el promedio de los salarios y el promedio de las edades por departamento, para poder realizar la comparación. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento) AS sal_medio, avg (edad) OVER (PARTITION BY departamento) AS ed_media FROM empleado
21
Resultados
22
Ejemplo 2 Calcular el promedio de los salarios teniendo en cuenta la fila actual más los salarios de las dos filas siguientes que pertenecen a la partición. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento ORDER BY ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING ) AS salario_medio FROM empleado
23
Resultados
24
Más funciones Agregadas
row_number() percent_rank() last_value() rank() dense_rank() first_value()
25
Row number Computa un número de fila secuencial comenzando con 1 en la primera tupla en cada partición y de acuerdo al ordenamiento de las tuplas en la partición. Enumerar los empleados por cada tipo de departamento. SELECT departamento, salario, edad , ROW_NUMBER() OVER (PARTITION BY departamento) FROM empleado;
26
Resultados
27
RANK Es el rango o jerarquía que ocupa una tupla R teniendo en cuenta las tuplas que la preceden. El rango si encuentra dos tuplas en una posición empatada, les asigna el mismo número. Mostrar el lugar que ocupan los empleados ordenados por la edad. SELECT departamento, salario, edad , Rank() OVER (order by edad) FROM empleado;
28
Resultados
29
RANK Mostrar el lugar que ocupan los empleados ordenados por la edad dentro de su departamento. SELECT departamento, salario, edad , Rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;
30
Resultados
31
DENSERANK El DENSERANK (rango denso) otorga un número de orden a la tupla en dependencia de su puesto en el ordenamiento sin dejar saltos en la numeración. Ejemplo: Mostrar el lugar que ocupan los empleados ordenados por la edad. SELECT departamento, salario, edad , dense_Rank() OVER (order by edad ) FROM empleado;
32
Resultados
33
DENSERANK Ejemplo: Mostrar el lugar que ocupan los empleados ordenados por la edad dentro de su departamento. SELECT departamento, salario, edad , dense_Rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;
34
Resultados
35
PERCENT_RANK Devuelve el ranking relativo (rank() – 1) / (total de filas - 1) SELECT departamento, salario, edad , percent_rank() OVER (order by edad ) FROM empleado;
36
Resultados
37
PERCENT_RANK Mostrar el ranking relativo que ocupan los empleados ordenados por la edad dentro de su departamento. SELECT departamento, salario, edad , percent_rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;
38
Resultados
39
LAST_VALUE Devuelve el último valor del marco de la ventana para el atributo indicado. Ejemplo: Mostrar los datos de cada empleado y la mayor edad del departamento a que pertenecen. SELECT departamento, salario, edad, last_value(edad) OVER (PARTITION BY departamento order by edad ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM empleado;
40
Resultados
41
FIRST_VALUE Devuelve el primer valor del marco de la ventana para el atributo indicado. Ejemplo: Mostrar los datos de cada empleado y la menor edad del departamento a que pertenecen. SELECT departamento, salario, edad, first_value(edad) OVER (PARTITION BY departamento order by edad ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM empleado;
42
Resultados
43
Conclusiones
44
CLÁUSULA WITH La cláusula WITH permite especificar una o más subconsultas que serán referenciadas por su nombre en la consulta principal. Una propiedad útil de las consultas WITH es que son evaluadas solo una vez por cada ejecución de la consulta principal, aún si la consulta primaria se refiere a ellas más de una vez.
45
Optimización de Consultas.
CLÁUSULA WITH Consultas Recursivas. Optimización de Consultas.
46
Sintaxis [ WITH [ RECURSIVE ] SELECT [ FROM ] [ WHERE ] [ GROUP BY] [ HAVING] [ORDER BY]
47
Consultas Recursivas Es una consulta que hace referencia a su salida a partir del uso de la cláusula with. WITH RECURSIVE nombretabla (<lista de columnas>) AS ( < caso base> [UNION|INTERSECT] [ALL|DISTINCT] <paso recursivo> )
48
Optimización de Consultas
Es una consulta que hace referencia a su salida a partir del uso de la cláusula with. WITH <alias_name> AS (sql_subquery_statement) SELECT column_list FROM <alias_name>[,tablename] [WHERE <join_condition>]
49
Optimizar el Rendimiento de Consultas
¿Cuál es la diferencia del salario de cada uno de los empleados con respecto a la media de su departamento? SELECT e1.empid, e1.departamento, e1.salario, e1.edad, (select avg(e2.salario) from empleado e2 where e2.departamento=e1.departamento ) as promedio FROM empleado e1;
50
Utilizando la cláusula WITH
WITH departamento_salario as (SELECT e2.departamento, AVG(e2.salario) as salario_promedio FROM empleado e2 GROUP BY departamento) SELECT e1.empid, e1.departamento, e1.salario, e1.edad, departamento_salario.salario_promedio FROM empleado e1, departamento_salario WHERE departamento_salario.departamento = e1.departamento;
51
Resultado
52
Optimizar el Rendimiento de Consultas
Mostrar para cada empleado, además del salario promedio de su departamento, la edad promedio en el departamento de cada uno. SELECT e1.empid, e1.departamento, e1.salario, e1.edad, (select avg(e2.salario) from empleado e2 where e2.departamento=e1.departamento ) as salario_promedio, (select avg(e3.edad) from empleado e3 where e3.departamento=e1.departamento ) as edad_promedio FROM empleado e1;
53
Utilizando la cláusula WITH
WITH departamento_salario as (SELECT e2.departamento, AVG(e2.salario) as salario_promedio FROM empleado e2 GROUP BY departamento), departamento_edad as (SELECT e3.departamento, AVG(e3.edad) as edad_promedio FROM empleado e3 GROUP BY departamento) SELECT e1.empid, e1.departamento, e1.salario, e1.edad, departamento_salario.salario_promedio, departamento_edad.edad_promedio FROM empleado e1, departamento_salario, departamento_edad WHERE departamento_salario.departamento = e1.departamento AND e1.departamento = departamento_edad.departamento;
54
Resultados
55
Planificador de Consultas
Se puede usar para mostrar el plan de ejecución que el planificador genera para una consulta dada. Sintaxis: EXPLAIN PLAN FOR <query>
56
Utilidad del Planificador
O uso deste comando é importantíssimo para analisar a optimização de consultas quando se utilizam funciones de ventanas ou a cláusula WITH. Para isso se deve analisar o plano de consulta com a resposta em sql básico e depois com a variante que se tenha eleito para a optimização dependendo do caso.
57
Conclusiones
58
Estudio Independiente
PERCENT_RANK LAST_VALUE FIRST_VALUE Consultas Recursivas utilizando la cláusula WITH Uso del planificador de consultas para comparar el rendimiento de dos consultas.
59
Estudio Independiente
Utilizando el script entregado para el estudio independiente, ejecuten el planificador de consultas para los ejemplos de la conferencia en sql básico y utilizando funciones de ventana o cláusula WITH, con el objetivo de analizar las variaciones en los tiempos de respuesta.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.