mot*_*zzt 2 sql-server query optimization
这个问题让我疯狂了几天,我可能已经找到了答案,但我需要确认并检查最终的简单解决方案。
当存储过程使用一些用户定义的函数时,UDF 计划是合并到主计划中并且一切都得到优化还是每次都直接调用?
假设它没有发生,有没有办法强制 SQL Server 为特定的 SP 执行它?
如果我正确理解这个问题,它应该取决于函数的类型。内联表值函数将它们的定义替换为引用查询,就像在视图中发生的一样。这就是“内联”的含义,以及为什么它们不是可以签名的真正模块,以及与其他函数类型的其他差异。
多语句表值函数和标量用户定义函数是完全独立的模块,分别执行并有自己的计划。
此行为与它们在存储过程或即席查询中被引用无关。
现在,是否每次都调用 UDF,这取决于 UDF 的类型:
IsDeterministic=true;(false默认情况下),并且不进行任何数据访问,则不会阻止并行计划,并且应该能够缓存它们的返回值(我假设每个查询执行)。所有这一切就是为什么,只要有可能,最好将 T-SQL UDF 转换为 T-SQL Inline TVF。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |