4

Связано с 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 

Почему это?

ответ

5

Хлоп - судя по всему, она требует SCHEMABINDING быть указан другими мудрым он could cause performance problems

ALTER FUNCTION [udf_YearFromDataDtID] 
(
    @DATA_DT_ID int 
) 
RETURNS int 
WITH SCHEMABINDING 
AS 
BEGIN 
    RETURN @DATA_DT_ID/10000 
END 

Похоже, что я мог бы получить некоторый прирост производительности, фиксируя их. Ницца.

+0

Использование UDF в запросах наносит огромный удар производительности независимо от того, что вы делаете. Если вы вошли во все ваши запросы и заменили все экземпляры вызовов UDF на sql в функциях, вы могли бы увидеть несколько порядков разницы в величине. Это делает повторный SQL, но это может реально помочь. – 2008-11-21 21:50:32