【发布时间】:2016-04-08 19:52:31
【问题描述】:
今天我和同事讨论了 SQL Server 中内联表值函数的使用,为什么我推荐使用它们以及它们在哪些场景中有用。
我突然想到,它们不必有任何输入参数,但我想不出什么情况下你会想要这样做,而且它比视图有任何好处,有什么好处吗?
【问题讨论】:
-
一个重要的区别是您始终可以向表值函数添加默认参数。此外,计划的缓存方式可能存在细微差别。如果我没记错的话,视图是在第一次执行时编译的,但表值函数是在编译调用它们的查询时编译的(并且计划可能与查询一起缓存)。但是,这可能有点偏离。
-
我想不出来,我强烈支持这种情况下的观点,因为内联表值函数更复杂,需要更多资源
-
@user3481891 你能解释一下为什么 itvf 更复杂吗?为什么你说他们需要更多的资源?他们需要什么资源?我很好奇这两种说法背后的事实。
-
当然。一个 itvf 需要更多的结构来容纳参数。更多的结构是更复杂的。更高的复杂性意味着更多的内存、CPU 和磁盘空间。定义不带参数的 itvf 可能只是简单地向 SQL Server 发出信号,将其编译为视图,在这种情况下,仅在编译时使用额外的资源。额外的复杂性将只是一个额外的指针的问题,但在 itvf 中涉及的资源和复杂性总是比视图多。它适用于何处取决于 MS 在何处实现它。如果你只需要一个视图,只定义一个视图。
标签: sql-server inline-table-function