小编Fis*_*ury的帖子

Inline-TVF 的性能 vs. 视图

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

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

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

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

performance sql-server-2005 view functions

9
推荐指数
1
解决办法
3990
查看次数

用户定义函数性能缺点

我有一个包含大量 UDF 的数据库,这些 UDF 由涉及大量数据操作和计算的长时间运行的进程调用。

我使用 UDF 的想法是将信息的逻辑单元从底层表中分离出来。例如,如果我想获取有关汽车的信息,我可能有几个表,例如颜色、型号、年份等,每次获取汽车时我都必须加入这些表。相反,我将使用像 fnCar() 这样的函数来获取数据的非规范化视图。

我在长时间运行的过程中多次调用这些函数,我想知道如果我有一个非规范化的工作表、视图或临时表来进行数据操作和计算是否会更好。一般来说,使用 UDF 在性能方面是否有一些我应该注意的缺点?

例如,我使用 UDF 进行一些计算。然后,我对该数据进行逆透视并将其存储在表中。每当我需要再次使用该数据时,我都会调用 UDF 将数据转回原处。我们这样做的原因是为了保持计算的灵活性。如果我们添加/删除/更改计算,我们不想更改数据模型。

--Calculate some values in a function

declare @location table
(
    id int,
    lattitude float,
    longitude float
)

insert into @location select  1, 40.7, 74
insert into @location select  2, 42, 73
insert into @location select  3, 61, 149
insert into @location select  4, 41, 87


declare @myLattitude float
declare @myLongitude float
set @myLattitude =43
set @myLongitude = 116

declare @distance table
( …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 functions

2
推荐指数
1
解决办法
1295
查看次数

标签 统计

functions ×2

sql-server-2005 ×2

performance ×1

view ×1