Ich schreibe gerade eine alte gespeicherte Prozedur um und bin auf ein unerwartetes Leistungsproblem gestoßen, als ich eine Funktion anstelle von Inline-Code verwendet habe.
Die Funktion ist sehr einfach und lautet wie folgt:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
Ich habe also zwei identische Abfragen, aber eine verwendet die Funktion und die andere führt die Berechnung in der Abfrage selbst durch:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
Jetzt läuft die Abfrage mit dem Inline-Code dreimal schneller als diejenige mit der Funktion.