我在 SQL Server 2008 中遇到了一个函数问题,如果我使用函数执行查询,大约需要 40 秒,如果我删除函数并在查询中添加函数的逻辑,则为 0 秒!
任何人都可以解释为什么使用函数会这么慢的原因?我真的很想使用该函数来封装逻辑,但我没有找到...
我在 SQL Server 2008 中遇到了一个函数问题,如果我使用函数执行查询,大约需要 40 秒,如果我删除函数并在查询中添加函数的逻辑,则为 0 秒!
任何人都可以解释为什么使用函数会这么慢的原因?我真的很想使用该函数来封装逻辑,但我没有找到...
在 JOIN 或 WHERE 子句中使用标量 UDF 可以防止使用强制 SQL Server 执行表扫描的索引。它还将阻止 SQL Server 正确估计行数,这可能会导致以后选择错误的计划。每一行的调用成本也可以加起来。
一般来说,远离标量值 UDF 是个好主意。但是,您可以使用内联表值函数来封装您的逻辑。它们像视图一样被处理并由优化器解决。重要的是您使用的是内联 TVF 类型。多语句 TVF 甚至比标量 UDF 更差。
有关更多详细信息,请查看我的文章:不同类型函数的性能比较