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

Slides:



Advertisements
Apresentações semelhantes
O Comando DROP INDEX Para eliminar um índice definido sobre uma tabela, utilize: Drop Index on ; Ex: No Access: Drop Index X on.
Advertisements

Professor: Marcus Sampaio Monitor: Eduardo Santiago Moura
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
SQL Structured Query Language (continuação)
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados I 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone: 9531 – 7555.
Visões Marilde Santos.
SQL – DML Consultas envolvendo relacionamentos entre tabelas
Ordenação de Resultados
Operadores Especiais da SQL
Introdução à Engenharia da Computação
Oficina sobre banco de dados
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Banco de dados Profª Kelly Medeiros.
Comandos de SQL Excel VBA II.
SQL Álvaro Vinícius de Souza Coêlho
Cronograma Formato do Comando SELECT – 1ª Seção Uso de Funções (DATE_FORMAT, DAY, MONTH, NOW, CONCAT, FORMAT, COUNT, AVG, MAX, MIN e FORMAT) AS DISTINCT.
BANCO DE DADOS UNIVERSIDADE ESTADUAL DE SANTA CRUZ
Design Patterns / Acesso ao banco de dados (java.sql)
(Linguagem de Consulta Estruturada)
Desenvolvendo um script SQL
Linguagem SQL.
Treinamento sobre SQL.
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Treinamento PHP Módulo 2 PHP Avançado Waelson Negreiros waelson.com.br “Está conosco o Senhor dos Exércitos”
Baseado no material do Professor Raul Paradeda
REVISÃO Comandos SQL - DML SELECT * FROM ?.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
AULA 20 Profa. Sandra de Amo GBC053 – BCC
SQL- Structured Query Language  SQL é uma linguagem de comandos para interagir com uma BD relacional (não é case-sensitive).  A linguagem Java permite.
Treinamento SQL Server
SQL Saturday #100 Brazil Windowing Functions no SQL Server 2012 SELECT * FROM (VALUES('Fabiano Neves Amorim'), ('Sr.Nimbus – SQL Server MVP'),
Banco de Dados I Linguagem SQL e Álgebra Relacional 4P/SI – 2010/02
Banco de Dados I I Comandos SQL
NOTA DE AULA SQL.
Linguagem SQL Prof. Juliano.
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
Modelo de base de dados relacional
1 Structured Query Language (SQL) 4 SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
VBA – Visual Basic para Aplicativos
UCSal – Bacharelado em Informática
Linguagem de definição de dados - SQL
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
Prática de Banco de Dados Créditos: Prof. Jefferson Silva Adaptações: Prof. Nécio de Lima Veras.
Banco de Dados para Redes– Aula 03 Prof. Me. Ronnison Reges Vidal.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Supervisão e Redes Industriais Tutorial E3 Elipse Capítulo 14 ARMAZENAMENTO DE DADOS Felipe Domeni, Gabriel Martin, Leandro Gomes Rafael Benoliel, Tiago.
Banco de Dados José Antônio da Cunha CEFET – RN.
Álgebra Relacional Vania Bogorny.
Tema 1: Conceitos fundamentais de banco de dados
Banco de Dados I Desenho de Bancos de dados Relacionales
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
BANCO DE DADOS Araújo Lima Outubro / 2017 Araújo.
Daniel Paulo SQL Server 2016 Módulo II Daniel Paulo
Armazenamento de Dados Espaciais
BANCO DE DADOS Araújo Lima Set / 2018 Araújo.
MS-SQL Server Structure Query Language
Prática O-R Fernando Fonseca.
Aula Prática Objeto-Relacional Monitoria GDI
Prática - BD Distribuído
Prática O-R Fernando Fonseca.
Window Functions Logan Destefani Merazzi
SQL – COMANDOS DML Profª Rosana Traversa.
Modelagem de Banco de Dados
Módulo III Capítulo 3: Linguagem SQL
Transcrição da apresentação:

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

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?

Objetivos Descrever a estrutura e funcionamento das funções agregadas. A cláusula WITH e a cláusula OVER.

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.

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

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

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

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

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;

¿É 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.

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.

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

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

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.

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.

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

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;

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

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;

Resultados

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

Resultados

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

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;

Resultados

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;

Resultados

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;

Resultados

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;

Resultados

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;

Resultados

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

Resultados

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;

Resultados

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;

Resultados

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;

Resultados

Conclusiones

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.

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

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>]

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;

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;

Resultado

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;

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;

Resultados

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>

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.

Conclusiones

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