SQL Server StoredProc与UDF内联表

时间:2009-10-03 08:55:15

标签: sql-server stored-procedures inline user-defined-functions

我写了一个复杂的查询,它会返回一个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的结果运行它们时,我看不出两者之间的显着性差异。但在实际实现中,结果可能是一百万行。

对于哪一个会更好的表现?

1 个答案:

答案 0 :(得分:2)

我建议您比较两种技术的执行计划,而不是猜测。

  

用户定义的功能可以   方便,他们有时也可以   导致性能受损。这个   他们的问题是他们使用   逐行处理,类似于   游标,而不是基于集合   操作。所以如果结果集   你的查询,然后是表现   影响会很小。但如果   结果集很大,然后是性能   很可能会成为一个问题。   一般来说,如果你正在使用   用户定义的功能,你会想要的   避免使用大结果   集。请改用存储过程。

提高标量值用户定义函数性能的一种方法是将它们转换为表值函数。