2012-11-01 39 views
0

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

任何人都可以解释我为什么使用功能也可以这么慢的原因是什么?我真的想要使用函数来封装逻辑,但我没有找到方法......

+6

将函数内的代码贴出来。 – 2012-11-01 15:17:29

+0

提供了一些代码?也是函数标量的类型?内联表?它是如何使用这个函数做什么的? – JoshBerke

+0

在WHERE或JOIN子句中调用函数吗? – SchmitzIT

回答

0

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

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

更多详情请查阅我的文章:Performance Comparisons of different types of Functions