Есть три агрегатные функции, которые чаще всего используются на практике:
COUNT,
SUM и
AVG.
И если первая уже обсуждалась
ранее, то с остальными есть интересные нюансы с производительностью. Но давайте обо всем по порядку…
При использовании агрегатных функций на плане выполнения, в зависимости от входного потока, может встречаться два оператора:
Stream Aggregate и
Hash Match.
Для выполнения первого может требоваться предварительно отсортированный входной набор значений и при этом
Stream Aggregate не блокирует выполнение последующих за ним операторов.
В свою очередь,
Hash Match является блокирующим оператором (за редким
исключением) и не требует сортировки входного потока. Для работы
Hash Match используется хеш-таблица, которая создается в памяти и в случае неправильной оценки ожидаемого количества строк, оператор может сливать результаты в
tempdb.