在查询中调用SQL函数

时间:2012-11-01 15:15:38

标签: sql sql-server-2008

我在SQL Server 2008中遇到一个函数的问题,如果我用函数执行查询,它需要40秒,如果我删除函数并在查询中添加函数的逻辑,则为0秒!

任何人都可以解释为什么使用函数可能会这么慢的原因?我真的想用这个函数来封装逻辑,但我找不到...的方式。

1 个答案:

答案 0 :(得分:0)

在JOIN或WHERE子句中使用标量UDF可以防止使用索引强制SQL Server执行表扫描。它还将阻止SQL Server正确估计行计数,这可能导致以后的错误计划选择。每行可以加起来调用成本。

一般来说,远离标量值的UDF是个好主意。但是,您可以使用内联表值函数来封装逻辑。它们像视图一样处理并由优化器解析。重要的是您使用的是内联TVF类型。多语句TVF甚至比标量UDF更差。

有关详细信息,请查看我的文章:Performance Comparisons of different types of Functions