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)