Group_by

In caso di funzioni aggregate come

SELECT AVG(eta)
FROM Sommelier S

Tutti i record vengono scanditi e vengono mantenute informazioni aggiuntive

Funzione Informazione mantenuta
SUM totale dei valori stimati
AVG totale e numero di valori
MIN minimo dei valori
MAX massimo dei valori
COUNT numero dei valori

Group by

In caso di raggruppamenti come:

SELECT S.livello, MIN(età)
FROM Sommelier S
GROUP BY S.livello

È necessario partizionare i record e calcolare le funzioni di aggregazione per ogni record, ci sono 3 principali strategie:

Group by per mezzo di sorting

Una delle possibilità e quella di sfruttare tecniche di ordinamento come quelle viste per la proiezione, va sommato il costo di calcolo delle funzioni aggregate

Group by per mezzo di indici

In caso di indici sugli attributi di group by e di calcolo delle funzioni non e necessario accedere al file dati

✔️ in caso di b+tree se gli attributi di raggruppamento sono un prefisso della chiave si può utilizzare l’indice per accedere al file dati in maniera ordinata

Group by usando hashing

Si costruisce una tabella di hash in memoria centrale in maniera analoga al caso della proiezione