【发布时间】:2013-12-10 13:31:55
【问题描述】:
最近我做了一个 inetrview,面试官让我解释一下存储过程和 UDF 之间最基本的区别。
我能够回忆起 listed here 的一些差异,但他不接受其中任何一个作为 BASIC 差异。
他的回答是 SP 只编译一次,而 UDF 每次调用时都会编译,导致 UDF 比存储过程慢得多。
现在我已经搜索但无法得到明确的答案,这个断言是否正确。 请验证这一点。
【问题讨论】:
-
我知道 UDF 的估计行数一直是 1...
-
他们错了。每次调用 UDF 时都不会重新编译它们。这可以通过多种方式来证明。例如在分析器中跟踪(重新)编译事件,查看缓存 DMV 的计划。 My answer here 在多次执行 UDF 时查看堆栈跟踪。开销是在执行期间而不是编译期间。
-
什么样的函数 - 标量或内联表值或多语句表值?这三种是具有不同执行机制的不同类型的对象(内联 TVF 是内联的,例如:-)。
标签: sql-server stored-procedures