查找表的连接是否比用户定义的标量函数更优化?

时间:2012-08-03 08:53:28

标签: sql-server query-optimization

我有一个函数并传递一个整数,例如99,4或3

该函数返回一个不同的整数(因此有效地转换它)

现在我发现这个函数是在select中调用的,所以对于300行导入,我所有相关的表调用数字转换函数的总次数是250k次!

这让我很害怕 - 我的问题是在查询表中加入我的查询会更好 - 从而从select中删除该函数。

3 个答案:

答案 0 :(得分:3)

我会投票查找表,因为它可以利用表的索引(如果已创建) 此外,在针对表

运行时,不需要为每一行运行该函数

但是查找表的一个问题是它应该处理所有可能的输入。 我们只能通过查询表来处理有限的案例。

因此,如果您可以为所有可能的输入创建查找表,则查找表具有优于函数的性能优势

答案 1 :(得分:2)

您可以将函数中的逻辑复制到select语句中吗?

例如

SELECT (a.ValueA + a.ValueB) as [ValueC]
FROM SomeTable a

答案 2 :(得分:2)

对于第一种方法,我建议在select子句本身中编写查询/逻辑(相关函数)。你肯定会看到性能提升。我也有7,000,000条记录的性能问题。这对我有所帮助。虽然没有。执行次数不会减少,但它肯定会提高性能,因为查询比函数

快得多