使用视图或函数重用sql

ama*_*eur 15 sql sql-server performance views function

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

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

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

我倾向于选项1但是希望看哪些是更好和更常见的做法.这将是更好的性能明智等(加入视图或调用函数)

编辑:RDBMS是SQL Server

Mar*_*ith 13

如果您将始终使用相同的参数化谓词来过滤结果,那么我将使用参数化的内联表值函数.从理论上讲,它被视为与View相同,因为它们在实践中都被优化器扩展,可以避免谓词推动问题.这种情况的一个例子可以在第二部分中可以看出本文.

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

我可以看到View的一个优点是,它允许您选择没有过滤器或使用不同的过滤器,因此更加通用.

内联TVF也可用于替换标量UDF以提高效率,如本例所示.