[SQL SERVER]改善純量值函數效能

[SQL SERVER]改善純量值函數效能

BOL上有建議最佳做法,但實務上我很少看到有人注意到,

一般我為了效能考量,會加上 SCHEMABINDING 和 RETURNS NULL ON NULL INPUT兩個選項,

SCHEMABINDING可以改善執行計畫(減少緩衝計算相關運算子),如下面範例

create function test1(@i varchar(10))
returns varchar
begin
 return left(@i,2)+substring(@i,5,2)
end

create function test1withs(@i varchar(10))
returns varchar
with SCHEMABINDING
begin
 return left(@i,2)+substring(@i,5,2)
end

 

執行計畫

image

function沒使用SCHEMABINDING,執行計畫多出了計算純量運算子。

 

BOL上也寫出最佳最法最好使用SCHEMABINDING

image

 

RETURNS NULL ON NULL INPUT可以告訴database engine,

如果輸入為null,那只需要簡單返回null而不需要執行function主體,

這樣一來可以減少不必要的資源開銷。

create function test1withs(@i float)
returns float
with SCHEMABINDING,RETURNS NULL ON NULL INPUT
begin
 return @i+@i*2.5;
end

 

 

 

 

 

參考

CREATE FUNCTION (Transact-SQL)

TSQL User-Defined Functions: Ten Questions You Were Too Shy To Ask

Improving query plans with the SCHEMABINDING option on T-SQL UDFs