Sql-Server-2005

Inline-TVF 的性能對比意見

  • August 14, 2012

我有一個數據庫,我在其中使用內聯 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;

引用自:https://dba.stackexchange.com/questions/22459