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

което
Има три обобщени функции, които най-често се използват на практика: БРОЯ, СУММА и AVG. И ако първият вече е бил обсъден по-рано, тогава с останалите има интересни нюанси с изпълнението. Но нека поговорим за всичко по ред ...

Когато използвате обобщени функции в плана за изпълнение, в зависимост от входния поток, могат да се появят два оператора: Общ поток и Хеш мач.

За да се извърши първата, може да се изисква предварително сортиран набор от стойности и едновременно Структура на потока не блокира изпълнението на последващи изявления.

На свой ред, Хеш мач е блокиращ оператор (с редки изключения) и не изисква сортиране на входния поток. За работа Хеш мач използва се хеш таблица, която се създава в паметта и в случай на неправилна оценка на очаквания брой редове, операторът може да обедини резултатите в tempdb.

Като цяло се оказва, че Структура на потока работи добре на малки сортирани набори от данни, докато Хеш мач се справя добре с големи несортирани комплекти и се поддава добре на паралелна обработка.

След като преодоляхме теорията, нека започнем да разглеждаме как работят съвкупните функции.

Да кажем, че искаме да изчислим средната цена сред всички продукти:

Според таблица с доста проста структура:

Тъй като имаме скаларна агрегация, в плана за изпълнение, както се очаква, ще видим Общ поток:

Вътрешно този оператор извършва две операции по агрегиране COUNT_BIG и СУММА (въпреки че на физическо ниво това се прави като една операция) в графата Цена:

входния поток

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

ще върне 6 вместо 4.

Сега нека разгледаме Изчисли Скалар, вътре в който има интересен израз за проверка на разделяне на нула:

Нека се опитаме да изчислим общата сума:

Планът за изпълнение ще остане същият:

Но ако погледнете операциите, извършени от Общ поток...

null

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