查看或用户定义的功能?

时间:2010-07-03 02:28:53

标签: sql sql-server sql-server-2008 sql-view

我有一个场景,我将两个表合并为一个(使用UNION),还加入来自其他一些表的数据。

我可以使用VIEW或UDF /用户定义函数执行此操作。

考虑到我目前在我的数据库中根本没有任何视图,但是有很多UDF用于全文搜索等,我很想在这个场景中使用UDF以保持“干净”。

然而,这完全是主观的,我想知道在这种情况下是否有更好的客观理由去寻找VIEW或UDF。

我确实比较了两者的查询计划,它们完全相同,所以我不认为使用任何一个都会有性能损失或优势。

是否有其他理由选择其中一个或不重要?

2 个答案:

答案 0 :(得分:5)

我总是按照复杂的顺序使用功能。在性能配置文件和安全性管理方面,视图相对简单。我可能会先用它。

我假设您正在讨论内联表值UDF,它几乎具有相同的性能特征。 UDF上的安全性略有不同,您不能使用触发器而不能在视图上执行“插入”操作。 UDF的一个好处是可以强制提供参数,从而确保使用模式符合预期,而视图可以在没有任何标准的情况下查询(可能是偶然的)。

如果你最终希望有一个UDF用于参数化,你可以将它分层放在视图之上(所以没有代码重复),你应该发现性能不会受到显着影响,因为优化器可以组合视图和内联TVF相当成功。

答案 1 :(得分:2)

通过使用此场景作为视图我看到的一个优点是索引它们并将它们用作“索引视图”,与传统视图不同,创建了物理文件,因此在有大量行的情况下查询速度更快它。使用它的效果是绕过所有行的连接和联合,而只是为新行构建它们。

正如我们的朋友Cade建议的那样,你使用UDF中的视图来保持它的清洁并且它没有太大不同。

希望这有帮助!