Inline-TVF 的性能 vs. 视图

Fis*_*ury 9 performance sql-server-2005 view functions

我有一个数据库,我在其中使用内联 TVF(表值函数)而不是视图。例如,我可能有两个名为 [汽车模型] 和 [汽车制造商] 的表,我在 TVF [fnCarBrands] 中将它们连接在一起。

这些 TVF 然后被其他 TVF 调用以进行进一步的处理和报告。所以我可能将我的函数 [fnCarBrands] 连接到表 [Purchase Year] 以形成一个函数 [fnCarBrandHistory]。对多层 TVF 依此类推。

我可能可以使用视图获得相同的功能,因为我的内联 TVF 实际上只是表和其他 TVF 的连接。

以这种方式编写的内联 TVF 的性能与视图相比如何?

And*_*mar 12

查询优化器将内联表值函数与视图完全一样对待:

CREATE FUNCTION dbo.InlineUdf(@arg1 int)
RETURNS TABLE
AS
RETURN 
(
    ... your query here ...
);
Run Code Online (Sandbox Code Playgroud)

一个多语句表值函数更像是一个存储过程运行。它们通常必须执行多次,而不是折叠到主查询中:

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;
Run Code Online (Sandbox Code Playgroud)