Което е по-бързо от 0 или NULL

Когато използвате обобщени функции в плана за изпълнение, в зависимост от входния поток, могат да се появят два оператора: Общ поток и Хеш мач.
За да се извърши първата, може да се изисква предварително сортиран набор от стойности и едновременно Структура на потока не блокира изпълнението на последващи изявления.
На свой ред, Хеш мач е блокиращ оператор (с редки изключения) и не изисква сортиране на входния поток. За работа Хеш мач използва се хеш таблица, която се създава в паметта и в случай на неправилна оценка на очаквания брой редове, операторът може да обедини резултатите в tempdb.
Като цяло се оказва, че Структура на потока работи добре на малки сортирани набори от данни, докато Хеш мач се справя добре с големи несортирани комплекти и се поддава добре на паралелна обработка.
След като преодоляхме теорията, нека започнем да разглеждаме как работят съвкупните функции.
Да кажем, че искаме да изчислим средната цена сред всички продукти:
Според таблица с доста проста структура:
Тъй като имаме скаларна агрегация, в плана за изпълнение, както се очаква, ще видим Общ поток:
Вътрешно този оператор извършва две операции по агрегиране COUNT_BIG и СУММА (въпреки че на физическо ниво това се прави като една операция) в графата Цена:

Не забравяйте, че средната стойност се изчислява само за НЕ Е НУЛНО, от операцията COUNT_BIG слиза надолу по колоната, а не със звездичка. Съответно, такова искане:
ще върне 6 вместо 4.
Сега нека разгледаме Изчисли Скалар, вътре в който има интересен израз за проверка на разделяне на нула:
Нека се опитаме да изчислим общата сума:
Планът за изпълнение ще остане същият:
Но ако погледнете операциите, извършени от Общ поток...

можете да бъдете малко изненадани. За какво SQL Server брои сумата, ако имам нужда само от сумата? Отговорът се крие в Изчисли Скалар: