algoritmos para operações de agregação e para o operador de agrupamento group by
DESCRIPTION
Algoritmos para Operações de Agregação e para o operador de Agrupamento GROUP BY. AULA 20 Profa. Sandra de Amo GBC053 – BCC. Operações de Agregação. Select AVG (S.Idade) From Sailors S Algoritmo Básico : Scan da relação Sailors - PowerPoint PPT PresentationTRANSCRIPT
Algoritmos para Operações de Agregação e para o operador de Agrupamento GROUP BY
AULA 20Profa. Sandra de Amo
GBC053 – BCC
Operações de AgregaçãoSelect AVG(S.Idade)
From Sailors S
Algoritmo Básico: Scan da relação Sailors Mantém em uma variável Agreg
as informações referentes à operação de AVG sobre os valores do atributo Idade
Custo = custo de um scan da relação S
115
79
11
SID Idade
253219
1820
21
Agreg
25
Avg(n) = (Avg(n-1)*(n-1) + t_n)/n
Avg(n) = (t_1+t_2+...+t_n)/n
Operações de ConjuntosSelect AVG(S.Idade)
From Sailors S
Algoritmo Básico: Scan da relação Sailors Mantém em uma variável Agreg
as informações referentes à operação de AVG sobre os valores do atributo Idade
Custo = custo de um scan da relação S
115
79
11
SID Idade
253219
1820
21
Agreg
28,5
Operações de ConjuntosSelect AVG(S.Idade)
From Sailors S
Algoritmo Básico: Scan da relação Sailors Mantém em uma variável Agreg
as informações referentes à operação de AVG sobre os valores do atributo Idade
Custo = custo de um scan da relação S
115
79
11
SID Idade
253219
1820
21
Agreg
25,33
Operações de Agregação SUM AVG COUNT MIN MAX
Operações de agregação são operações incrementais : Op(a1,...,an) = F(Op(a1,...,an-1) an, n)
Avg(a1,...,an) = F(Op(a1,...,an-1) an, n)
onde F(x,y,n) = (x*(n-1) + y)/n
Exercicio 1: Mostre que SUM, COUNT, MIN e MAXsão operações incrementais
Operador de Agrupamento: GROUP BY
SELECT S.Status, AVG(S.Idade)
FROM Sailors S
GROUP BY S.Status
Técnicas: Ordenação Hashing
Algoritmo para GROUP BY baseado em ordenaçãoEtapa 1: Fase da ordenação Ordena-se a relação pelo atributo do Group by
Etapa 2: Fase do agrupamentoFaz-se um scan da relação ordenada armazenando-se na variável Agreg o resultado da operação de agregação para cada grupo
Custos:Etapa 1 = 2M([LogB-1 M/B] + 1)Etapa 2 = MCusto total = 2M([LogB-1 M/B] + 1) + M
Exercicio 2: Projetar um algoritmo otimizado (baseado em ordenação) para o GROUP BY e calcular seu custo
Algoritmo para GROUP BY baseado em Hash Fase do Particionamento
Particiona a relação R pelos atributos de agrupamento – do GROUP BY
Desta maneira: elementos de um mesmo grupo só podem estar numa mesma partição.
O particionamento é feito de modo que o número de partições seja B-1 e cada partição caiba inteira na memória em B-1 páginas.
Para isso, é preciso que o tamanho do buffer (B) seja > M onde M = número de páginas da relação R.
Fase do Agrupamento Carrega partição inteira de R Aplica algoritmo de ordenação interna pelos atributos do
agrupamento (Group By). Varre a partição (ordenada) e calcula-se o resultado da função de
agregação sobre cada grupo CUSTO = 2M + M = 3M
Fase do Particionamento
Buffer tem capacidade para B páginas,onde B – 1 = número de partições
Página de R
Relação R
Disco Disco
Relação R Particionada
Pt 1 Pt 2 Pt 3 Pt 6Pt 5Pt 4
Distribui usando hash h sobre os atributos de agrupamento (presentessa cláusula GROUP BY)
M páginas M páginas
Fase do Agrupamento
Buffer tem capacidade para B páginas,onde B – 1 é suficiente para conter uma partiçãointeira de R.
Resultado
Relação R particionada
Disco Disco
Relação R’ Particionada
M páginas T páginas
Partição n
Ordena pelos atributosdo Group By Varre, calcula a operaçãode agregação sobre cada grupo einsere tupla (Val-Grupo,Val-Agreg)no resultado
Exemplo:
Seja R(A,B,C) M = 1000 páginas, B = 41
Consulta: SELECT R.A, Sum(B) FROM R GROUP BY R.A
1. Fase do Particionamento:
1. 40 partições de 1000/40 = 25 páginas cada
2. Custo = 1000 + 1000 = 2000
3. Resultado no disco após a fase do particionamento: 1000 páginas, particionadas em 40 partições, onde cada partição tem 25 páginas.
4. Registros com mesmo valor de A estão em uma mesma partição
2. Fase do Agrupamento
1. Para i = 1, ..., 40
1. Carrega-se partição i de 25 páginas
2. Ordena-se internamente
3. Calcula-se o output (o output tem número de páginas <= 25)
4. Custo = 1000
3. Custo total = 2000 + 1000 = 3000
GROUP BY usando um índiceSELECT R.A, Sum(R. B)
FROM R
GROUP BY R.A
Suponha que tenhamos um índice denso com chave (A,B)
Logo: o arquivo de índice contém todas as informações necessárias para se fazer a consulta.
Portanto: calcula-se a consulta, usando-se as técnicas de ordenação ou Hash (dependendo do tipo do índice)Select I.A, Sum(I.B)
FROM I
GROUP BY I.A
Onde I = arquivo de índice
CUSTO = N onde N = número de páginas do indice I
GROUP BY usando um índice agrupado denso B-TREESELECT R.A, Sum(R. B)
FROM R
GROUP BY R.A
Suponha que tenhamos um índice do tipo B-TREE (ou ISAM) com chave A,
Usa-se o indice para procurar as páginas de dados referentes a cada valor do atributo de agrupamento A
Para cada valor do atributo de agrupamento, carrega-se estas páginas de dados na memória (possivelmente vão caber todas na memória)
Varre-se tais páginas na memória e executa-se a operação de agregação.
Evita-se assim a fase de ordenação da operação de agrupamento