我写了一个复杂的查询,它会返回一个ID列表。现在我想重新使用此查询,以便我将结果与另一个查询相结合。为此,我计划将其放入存储过程或UDF中,然后使用它插入临时表。
如下所示
1)将查询放入存储过程并将其插入临时表
INSERT INTO #TEMP
EXEC SP_COMPLEX(@PARAM1,@PARAM2...@@PARAMN)
2)将查询放入UDF并将其插入临时表
INSERT INTO #TEMP
SELECT ID_LIST FROM DBO.UDF_COMPLEX(@PARAM1,@PARAM2...@@PARAMN)
当我为1000个ID的结果运行它们时,我看不出两者之间的显着性差异。但在实际实现中,结果可能是一百万行。
对于哪一个会更好的表现?
答案 0 :(得分:2)
我建议您比较两种技术的执行计划,而不是猜测。
用户定义的功能可以 方便,他们有时也可以 导致性能受损。这个 他们的问题是他们使用 逐行处理,类似于 游标,而不是基于集合 操作。所以如果结果集 你的查询,然后是表现 影响会很小。但如果 结果集很大,然后是性能 很可能会成为一个问题。 一般来说,如果你正在使用 用户定义的功能,你会想要的 避免使用大结果 集。请改用存储过程。
提高标量值用户定义函数性能的一种方法是将它们转换为表值函数。