[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
執行計畫
function沒使用SCHEMABINDING,執行計畫多出了計算純量運算子。
BOL上也寫出最佳最法最好使用SCHEMABINDING
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
參考