【问题标题】:View or User Defined Function?视图还是用户定义的函数?
【发布时间】:2010-07-03 11:53:54
【问题描述】:

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

我可以使用 VIEW 或 UDF/用户定义函数来做到这一点。

考虑到到目前为止我的数据库中根本没有视图,但有很多 UDF 用于全文搜索等,我很想在这种情况下也使用 UDF 以保持它“干净”。

但是,这完全是主观的,我想知道在这种情况下是否有更好的客观理由选择 VIEW 或 UDF。

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

还有其他理由选择一个而不是另一个吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您最终确实想要使用 UDF 进行参数化,您可以将它放在视图之上(因此没有代码重复),您应该会发现性能不会受到显着影响,因为优化器可以将视图和内联 TVF 相当成功。

    【讨论】:

      【解决方案2】:

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

      正如我们的朋友 Cade 所建议的那样,您可以在 UDF 中使用视图来保持它的整洁,这并没有太大的不同。

      希望这会有所帮助!

      【讨论】:

      • 我无法创建索引视图 - UNION 禁止视图索引。还是我错了?
      猜你喜欢
      • 2014-12-11
      • 1970-01-01
      • 2022-12-25
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多