Algoritmos para Operações de Agregação e para o operador de Agrupamento GROUP BY AULA 22 Profa. Sandra de Amo GBC053 – BCC 2012-2 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 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 23,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 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: Ordena-se a relação pelo atributo do Group by Etapa 2: 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: 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 cada partição caiba inteira na memória. 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 resultado 4. Grava as 25 páginas da partição i 5. 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 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 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