Связано с this question, я решил проверить UDF в моем хранилище данных (который должен был в значительной степени быть детерминированным), и я нашел несколько, которые не являются такими, какие должны быть.Определенные пользователем функции SQL Server 2005 неправильно помечен как недетерминированный?
Например:
CREATE FUNCTION [udf_YearFromDataDtID]
(
@DATA_DT_ID int
)
RETURNS int
AS
BEGIN
RETURN @DATA_DT_ID/10000
END
Показывает в этом запросе:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE IS_DETERMINISTIC = 'NO'
AND ROUTINE_TYPE = 'FUNCTION'
ORDER BY ROUTINE_NAME
Почему это?
Использование UDF в запросах наносит огромный удар производительности независимо от того, что вы делаете. Если вы вошли во все ваши запросы и заменили все экземпляры вызовов UDF на sql в функциях, вы могли бы увидеть несколько порядков разницы в величине. Это делает повторный SQL, но это может реально помочь. – 2008-11-21 21:50:32