Обикновено избиране резултат от скаларна функция няма да навреди много, но филтрирането от това може лесно да струва стотици секунди (не е задължително обаче).
Ако трябва да филтрирате по резултат от скаларна функция (WHERE col = dbo.scalar_function()
), често помага вместо това да се направи вградена функция със стойност на таблица. Той ще върне стойността си като единствен ред от таблицата с резултати. След това бихте направили inner join
с резултата от функцията, ефективно филтриране по върнатата стойност. Това работи, защото SQL Server винаги е в състояние да отвие вградени функции със стойност на таблица и да ги вгради в извикващата заявка.
Имайте предвид, че този трик няма да работи, ако функцията е многоетапна. Те не могат да се развият.