Я переписываю какую-то старую хранимую процедуру и столкнулся с неожиданной проблемой производительности при использовании функции вместо встроенного кода.
Функция очень проста:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
Итак, у меня есть два одинаковых запроса, но один использует функцию, а другой выполняет вычисления в самом запросе:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
Теперь запрос со встроенным кодом выполняется в 3 раза быстрее, чем тот, который использует функцию.