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
SID Idade
1
1
5
25
32
19
Agreg
25
Algoritmo Básico:
7 18
9 20

Scan da relação Sailors
11 21 referentes à operação de

Mantém em uma variável Agreg as informações
AVG sobre os valores do atributo Idade

Custo = custo de um scan da relação S
Avg(n) = (t_1+t_2+...+t_n)/n
Avg(n) = (Avg(n-1)*(n-1) + t_n)/n
Operações de Conjuntos
Select AVG(S.Idade)
From Sailors S
SID Idade
1
1
5
25
32
19
Agreg
28,5
Algoritmo Básico:
7 18
9 20

Scan da relação Sailors
11 21 referentes à operação de

Mantém em uma variável Agreg as informações
AVG sobre os valores do atributo Idade

Custo = custo de um scan da relação S
Operações de Conjuntos
Select AVG(S.Idade)
From Sailors S
SID Idade
1
1
5
25
32
19
Agreg
25,33
Algoritmo Básico:
7 18
9 20

Scan da relação Sailors
11 21 referentes à operação de

Mantém em uma variável Agreg as informações
AVG sobre os valores do atributo Idade

Custo = custo de um scan da relação S
Operações de Agregação





SUM
AVG
COUNT
MIN
MAX
Exercicio 1: Mostre que SUM, COUNT, MIN e MAX
são operações incrementais
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
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ção
Etapa 1: Fase da ordenação
Ordena-se a relação pelo atributo do Group by
Etapa 2: Fase do agrupamento
Faz-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 = M
Custo 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
Relação R
Particionada
Relação R
Pt 1 Pt 2 Pt 3 Pt 4 Pt 5 Pt 6
Distribui usando hash h
sobre os atributos de
Página de R agrupamento (presentes
sa cláusula GROUP BY)
Disco
M páginas
Buffer tem capacidade para B páginas,
onde B – 1 = número de partições
Disco
M páginas
Fase do Agrupamento
Relação R’
Particionada
Relação R particionada
Partição n
Ordena pelos atributos
do Group By
Varre, calcula a operação
de agregação sobre cada grupo e
insere tupla (Val-Grupo,Val-Agreg)
no resultado
Disco
M páginas
Resultado
Buffer tem capacidade para B páginas,
onde B – 1 é suficiente para conter uma partição
inteira de R.
Disco
T páginas
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 índice
SELECT R.A, Sum(R. B)
FROM R
GROUP BY R.A



CUSTO = N
onde N = número de páginas
do indice I
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
GROUP BY usando um índice
agrupado denso B-TREE
SELECT 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
Download

Slides - Agrupamento