SQL Server:内联与多语句表值函数 – 性能注意事项
SQL Server 提供两种类型的表值函数:多语句表值函数 (MSTVF) 和内联表值函数 (ITVF)。 两者都返回表,但它们的性能差异很大。
主要区别在于它们的编译:ITVF 被编译,产生预先优化的执行计划,而 MSTVF 被解释,在运行时生成执行计划。 这通常会为 ITVF 带来卓越的性能,特别是当使用相同的参数重复调用该函数时。
此外,与 MSTVF 不同,ITVF 利用表统计数据。当函数涉及过滤或连接大型数据集时,这一优势至关重要。
在提供的示例中,MSTVF 对客户 ID 过滤的单独查询的依赖阻碍了优化器利用高效连接策略的能力。 虽然优化 MSTVF 以减少多次调用可能会最大限度地减少性能差异,但由于可以访问表统计信息,等效的 ITVF 或 VIEW 通常仍会优于它。
因此,ITVF 通常是首选,提供更好的性能和更简单的维护。 然而,在涉及动态参数或需要动态修改中间结果的情况下,MSTVF 仍然是必要的。
以上是SQL Server 中的 MSTVF 与 ITVF:什么时候应该选择内联函数而不是多语句函数?的详细内容。更多信息请关注PHP中文网其他相关文章!