Sql-Server-2005
Inline-TVF 的性能對比意見
我有一個數據庫,我在其中使用內聯 TVF(表值函式)而不是視圖。例如,我可能有兩個名為
$$ car model $$和$$ car manufacturer $$我在 TVF 中加入$$ fnCarBrands $$. 這些 TVF 然後被其他 TVF 呼叫以進行進一步的處理和報告。所以我可能會發揮我的作用
$$ fnCarBrands $$並加入餐桌$$ Purchase Year $$形成一個函式$$ fnCarBrandHistory $$. 對於幾層 TVF,依此類推。 我可能會使用視圖獲得相同的功能,因為我的內聯 TVF 實際上只是表和其他 TVF 的連接。
以這種方式編寫的內聯 TVF 的性能與視圖相比如何?
查詢優化器將內聯表值函式視為視圖:
CREATE FUNCTION dbo.InlineUdf(@arg1 int) RETURNS TABLE AS RETURN ( ... your query here ... );
多語句表值函式的執行更像是儲存過程。它們通常必須執行多次,而不是折疊到主查詢中:
CREATE FUNCTION dbo.MultiStatementUdf (@col1 int) RETURNS @result TABLE ( id int primary key NOT NULL, ... ) AS BEGIN DECLARE @var1 int set @var1 = 42 INSERT @result SELECT ... RETURN END;