A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Implementação e Optimização de Bancos de dados

Apresentações semelhantes


Apresentação em tema: "Implementação e Optimização de Bancos de dados"— Transcrição da apresentação:

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 em janela. Cláusula WITH. 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 Resumo Implementação de Banco de Dados: Cláusula SELECT
Select …. (Funciones Agregadas) From ….. Tabela1 INNER JOIN Tabela2…..ON…. Where….. (Subconsultas, LIKE…) Group By Having (condição com funções agregadas) Order By … ASC….DESC…. Funções Agregadas: COUNT, AVG, MAX, MIN, SUM

6 Funções Agregadas em janela
As funções agregadas executam um cálculo em um conjunto de valores e retornam um único valor. Com exceção de COUNT, as funções agregadas ignoram valores nulos. Estão disponíveis em sistemas gestores de bancos de dados como Oracle, SQL Server, Sybase y DB2, PostgreSQL a partir da versão 8.4

7 ¿Por que usar funciones em janelas?
Empleado (empid, departamento, salario, edad)

8 Pregunta ¿Qual é a diferença do salário de cada um dos empregados com respeito à média de seu departamento?

9 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;

10 ¿É a solução óptima? Esta solução mostra-nos os dados da cada empregado com a média de salário do departamento ao que ele corresponde. No entanto com o uso de funções agregadas em janela a solução seria mais simple e os tempos de respostas seriam menores.

11 Diferenças entre o uso de funções janela e o uso do GROUP BY
Com o GROUP BY obtemos um resultado com uma fila pela cada valor diferente do atributo usado no GROUP BY.

12 Funções janelas Uma função em janela devolve um valor pela a cada fila do resultado de uma consulta.

13 Sintaxe das funções janelas
OVER( [PARTITION BY expression [, ...]] [ORDER BY expression [ASC|DESC][NULLS{FIRST|LAST}][, ...]] [Frame-Clause] )

14 Parámetros Partition by: Realiza a separação lógica das N classes que compõem a partição criada de acordo à expressão definida. Order by: Especifica a maneira em que se ordenassem os dados dentro da classe. Este elemento é de muita importância num grupo importante de casos.

15 Cláusula Frame No frame define-se o conjunto de filas que tem-se em conta para computar o resultado da função analítica, naqueles casos em que se opere sobre uma parte dos dados e não sobre toda a classe. Especifica a maneira em que se ordenassem os dados dentro da classe. Este elemento é de vital importância num grupo importante de casos.

16 Sintaxe de Frame-Clause
[ RANGE | ROWS ] frame_start [ RANGE | ROWS ] BETWEEN frame_start AND frame_end E os valores que podem ser alocados são os seguintes: UNBOUNDED PRECEDING value PRECEDING CURRENT ROW value FOLLOWING UNBOUNDED FOLLOWING

17 Exemplo 1 Mostrar o empid, departamento, salário, idade e a média dos salários por departamento, para poder realizar a comparação. SELECT empid, departamento, salario, edad, avg (salario) OVER (PARTITION BY departamento) AS promedio FROM empleado;

18 Resultados Mostrar o empid, departamento, salário, idade e a média dos salários por departamento, para poder realizar a comparação.

19 Ejemplo 1.1 Mostrar o nome, marca, peso, volumen, a média do peso e a média do volumen por marca, para poder realizar a comparação. SELECT nomb_prod, marca, peso, volumen, avg(peso) over (PARTITION BY marca) as peso_med, avg(volumen) over (PARTITION BY marca) as vol_med FROM producto;

20 Resultados

21 Ejemplo 2 Calcular a média dos salários tendo em conta a fila atual mais os salários das duas bichas seguintes que pertencem à partição. 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

22 Resultados

23 Mais funções Agregadas
row_number() percent_rank() last_value() rank() dense_rank() first_value()

24 Row number Computa um número de filas sequencial começando com 1 na primeira tupla na cada partição e de acordo ao ordenamento das tuplas na partição. Listar os empregados pela cada tipo de departamento. SELECT departamento, salario, edad , ROW_NUMBER() OVER (PARTITION BY departamento) FROM empleado;

25 Resultados

26 RANK É a faixa ou hierarquia que ocupa uma tupla R tendo em conta as tuplas que a precedem. A faixa se encontra duas tuplas numa posição empatada, atribui-lhes o mesmo número. Mostrar o lugar que ocupam os empregados ordenados pela idade. SELECT departamento, salario, edad , Rank() OVER (order by edad) FROM empleado;

27 Resultados

28 RANK Mostrar o lugar que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , Rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;

29 Resultados

30 DENSERANK O DENSERANK (faixa densa) outorga um número de ordem à tupla em dependência de seu posto no ordenamento sem deixar saltos na numeração. Mostrar o lugar que ocupam os empregados ordenados pela idade. SELECT departamento, salario, edad , dense_Rank() OVER (order by edad ) FROM empleado;

31 Resultados

32 DENSERANK Mostrar o lugar que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , dense_Rank() OVER (PARTITION BY departamento order by edad) FROM empleado;

33 Resultados

34 PERCENT_RANK Devolve o ranking relativo (rank() – 1) / (total de filas - 1) SELECT departamento, salario, edad , percent_rank() OVER (order by edad ) FROM empleado;

35 Resultados

36 PERCENT_RANK Mostrar o ranking relativo que ocupam os empregados ordenados pela idade dentro de seu departamento. SELECT departamento, salario, edad , percent_rank() OVER (PARTITION BY departamento order by edad ) FROM empleado;

37 Resultados

38 LAST_VALUE Devolve o último valor do marco da janela para o atributo indicado. Mostrar os dados da cada empregado e a maior idade do departamento a que pertencem. SELECT departamento, salario, edad, last_value(edad) OVER (PARTITION BY departamento order by edad ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM empleado;

39 Resultados

40 FIRST_VALUE Devolve o primeiro valor do marco da janela para o atributo indicado. 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;

41 Resultados

42 Conclusiones

43 CLÁUSULA WITH A cláusula WITH permite especificar uma ou mais subconsultas que serão referidas por seu nome na consulta principal. Uma propriedade útil das consultas WITH é que são avaliadas só uma vez pela cada execução da consulta principal, ainda se a consulta primária se refere a elas mais de uma vez.

44 Optimización de Consultas.
CLÁUSULA WITH Consultas Recursivas. Optimización de Consultas.

45 Optimización de Consultas
É uma consulta que faz referência a sua saída a partir do uso da cláusula with. WITH <alias_name> AS (sql_subquery_statement) SELECT column_list FROM <alias_name>[,tablename] [WHERE <join_condition>]

46 Optimizar o Rendimento de Consultas
¿Qual é a diferença do salário da cada um dos empregados com respeito à média de seu departamento? SELECT e1.empid, e1.departamento, e1.salario, e1.edad, (select avg(e2.salario) from empleado e2 where e2.departamento=e1.departamento ) as media FROM empleado e1;

47 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;

48 Resultado

49 Optimizar el Rendimiento de Consultas
Mostrar para a cada empregado, além da media do salário de seu departamento, a idade média no departamento da cada um. 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;

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), 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;

51 Resultados

52 Planificador de Consultas
Pode-se usar para mostrar o plano de execução que o planificador gera para uma consulta dada. Sintaxe: EXPLAIN PLAN FOR <query>

53 Utilidad del Planificador
O uso deste comando é importantíssimo para analisar a optimização de consultas quando se utilizam funciones de janelas 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.

54 Conclusiones

55 Estudio Independiente
PERCENT_RANK LAST_VALUE FIRST_VALUE Consultas Recursivas utilizando la cláusula WITH


Carregar ppt "Implementação e Optimização de Bancos de dados"

Apresentações semelhantes


Anúncios Google