Estoy reescribiendo algún procedimiento almacenado anterior y he encontrado un problema de rendimiento inesperado cuando uso una función en lugar de un código en línea.Por qué una función T-SQL UDF simple hace que la ejecución del código sea 3 veces más lenta
La función es muy simple de la siguiente manera:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
así que tengo dos consultas idénticas, pero se utiliza la función y el otro hace el cálculo en la propia consulta:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
Ahora la consulta con el código en línea se ejecuta 3 veces más rápido que el que usa la función.
Gracias por publicar. Su último enlace es un buen análisis empírico sobre este problema, pero no explica por qué es este comportamiento. –
@nagul: su primer enlace es malo. Parece que SQLMag cambió su URL. ¿Hay alguna posibilidad de que este sea el artículo? http://sqlmag.com/user-defined-function-udf/udfs-endanger-performance – EBarr