4

这个问题相关,我决定检查我的数据仓库中的 UDF(这在很大程度上应该是确定性的),我发现了几个不应该的。

例如:

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

为什么是这样?

4

1 回答 1

5

哎呀-显然,它需要指定 SCHEMABINDING 否则可能会导致性能问题

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

看起来我可以通过修复这些来获得一些性能提升。好的。

于 2008-11-21T17:13:44.010 回答