我有一个函数并传递一个整数,例如 99、4 或 3
该函数返回一个不同的整数(如此有效地转换它)
现在我发现这个函数是在一个选择中调用的,所以对于我所有相关表的 300 行导入,调用数字转换函数的总次数是 250k 次!
这让我很害怕——我的问题是在加入我的查询的查找表中这会更好——从而从选择中删除该函数。
我有一个函数并传递一个整数,例如 99、4 或 3
该函数返回一个不同的整数(如此有效地转换它)
现在我发现这个函数是在一个选择中调用的,所以对于我所有相关表的 300 行导入,调用数字转换函数的总次数是 250k 次!
这让我很害怕——我的问题是在加入我的查询的查找表中这会更好——从而从选择中删除该函数。
我会投票支持查找表,因为它可以利用表的索引(如果创建)此外,在针对表运行时,不需要为每一行运行该函数
但是查找表的一个问题是它应该处理所有可能的输入。我们只能使用查找表处理有限的情况。
因此,如果您可以为所有可能的输入创建一个查找表,那么查找表相对于函数具有性能优势
您能否将函数中的逻辑复制到您的 select 语句中?
例如
SELECT (a.ValueA + a.ValueB) as [ValueC]
FROM SomeTable a
对于第一种方法,我建议在 select 子句本身中编写查询/逻辑(相关函数的)。您肯定会看到性能提升。我也遇到了 7,000,000 条记录的性能问题。这对我有点帮助。虽然没有。执行次数不会减少,但肯定会提高性能,因为查询比函数快得多