Przepisuję niektóre stare procedury składowane i natknąłem się na nieoczekiwany problem z wydajnością podczas korzystania z funkcji zamiast kodu wbudowanego.Dlaczego prosta funkcja UDF T-SQL sprawia, że wykonanie kodu jest trzykrotnie wolniejsze
Funkcja ta jest bardzo prosty sposób następujący:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
Więc mam dwóch identycznych zapytań, ale używa funkcji, a drugi robi obliczenia w zapytaniu samego:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
Teraz zapytanie z wbudowanym kodem działa 3 razy szybciej niż przy użyciu tej funkcji.
Dziękujemy za publikację. Twój ostatni link to dobra empiryczna analiza tego problemu, ale nie wyjaśnia, dlaczego tak się dzieje. –
@nagul - Twój pierwszy link jest zły. Wygląda na to, że SQLMag zmienił ich adres URL. Czy jest szansa, że to ten artykuł? http://sqlmag.com/user-defined-function-udf/udfs-endanger-performance – EBarr