You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是函数内联(Inlining a function)?SQL Server中ITVF相比MTVF有何优势?

1. 什么是函数内联(Inlining a function)

函数内联是通用的代码编译优化手段,核心逻辑是在编译/执行阶段,把函数调用位置的代码直接替换为函数内部的实际执行逻辑,省去常规函数调用时需要走的参数压栈、上下文切换、返回值出栈等额外开销。这种优化是底层自动完成的,不会破坏原有代码的可读性和可维护性,同时能明显提升高频调用场景下的代码执行效率。

2. SQL Server中的inlining指的是什么

SQL Server语境下的内联,通常指针对用户定义函数(UDF)的执行优化机制:优化器会把函数的逻辑直接拆分嵌入到主查询的整体执行计划中,不需要为函数单独生成独立的执行上下文,避免了函数重复调用、独立执行带来的额外开销。

内联表值函数(ITVF)相比多语句表值函数(MTVF)的优势

  • 全局优化能力更强:ITVF的逻辑会完全融入主查询的执行计划,SQL Server优化器可以针对整体查询做全局优化,比如将外层的过滤谓词下推到函数内部的查询逻辑、匹配更合适的索引,大幅降低扫描的数据量。而MTVF的执行计划是独立生成的,优化器无法把外层查询的条件应用到MTVF内部,大多时候只能先扫描MTVF返回的全量数据再做过滤,性能损耗很高。
  • 无中间结果缓存开销:MTVF执行时需要先把所有返回结果写入临时表做存储,等所有逻辑执行完成后再把临时表的数据返回给外层查询,数据量越大,中间读写临时表的IO和内存开销越高。而ITVF没有中间缓存步骤,数据是流式返回的,完全省去了这部分开销。
  • 执行计划预估更准确:SQL Server优化器生成执行计划时依赖准确的行数预估,MTVF的统计信息默认是固定值(通常默认预估返回100行),和实际返回行数偏差极大,很容易生成完全失准的执行计划,数据量越大性能下降越明显。而ITVF的统计信息和主查询共享,行数预估更贴合实际场景,生成的执行计划效率更高。
  • 支持并行执行:MTVF默认无法使用并行执行计划,只能单线程运行,在多核服务器上处理大数据量时会被严重限制性能。而ITVF可以和主查询一起使用并行执行计划,能充分利用服务器的多核资源,性能差距可达数倍甚至数十倍。

内容的提问来源于stack exchange,提问作者RobMartin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:54:03