sql - 通过 View 或函数重用 sql

标签 sql sql-server performance function view

我有一个 SQL 查询,我将在多个存储过程中重用该查询。该查询针对多个表进行操作,并根据传递给它的 2 个变量返回一个整数值。

我不想在不同的存储过程中重复查询,而是想共享它并有两个选项:

  1. 创建一个 View ,我可以根据变量加入该 View 并从中获取整数值。
  2. 使用传递给它的条件再次创建一个函数并返回整型变量

我倾向于选项 1,但想了解哪种更好、更常见的做法。哪一个会更好的性能明智等(加入 View 或调用函数)

编辑:RDBMS 是 SQL Server

最佳答案

如果您始终使用相同的参数化谓词来过滤结果,那么我会选择参数化内联表值函数。理论上,这与 View 的处理方式相同,因为它们都由优化器扩展,实际上它可以避免谓词推送问题。这种情况的一个例子可以在this article的第二部分中看到。 .

正如 Andomar 在评论中指出的那样,大多数时候查询优化器确实很好地将谓词下推到需要的位置,但我不知道在任何情况下使用内联 TVF 的性能会更差所以这似乎是两个(非常相似)结构之间的合理默认选择。

我认为 View 的一个优点是,它允许您在没有过滤器或使用不同过滤器的情况下进行选择,因此更加通用。

内联 TVF 还可用于替代标量 UDF 以提高效率 as in this example .

关于sql - 通过 View 或函数重用 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811350/

相关文章:

ios - 滚动时将部分插入 UICollectionView 时出现性能问题

java - jdbc 中的结果集返回 true

php - 从 php 的 sql 查询中获取的行数

sql - 处理 ORA-01795 :maximum number of expressions in a list is 1000 in hibernate 的最有效方法

c# - 使用 SQL 过程替换文件中的字符串

c# - 在同步框架中配置适配器

sql - 前几行数组的累积数组?

sql-server - 将大量数据从一列传输到另一列的最有效方式?

performance - haskell列表理解能力

javascript - 如何缩小 webpack 包?