4

this question相關,我決定檢查我的數據倉庫中的UDF(這在很大程度上應該是確定性的),並且我發現了幾個不適合的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都會帶來巨大的性能提升。如果你接受了所有的查詢,並用函數中的sql替換了UDF調用的所有實例,那麼你可以看到幾個幅度差別的順序。它使重複的SQL,但它可以真正幫助。 – 2008-11-21 21:50:32

相關問題