1

我正在尝试优化我正在维护的存储过程,并且想知道是否有人可以让我了解以下选项的性能优势/劣势。对于我的解决方案,我基本上需要对存储在表中的 IMAGE 列中的图像运行转换程序。转换过程位于外部 .EXE 文件中。这是我的选择:

  1. 将目标表的结果拉到一个临时表中,然后使用游标遍历表中的每一行并在 IMAGE 列上运行存储过程。存储过程调用.EXE。

  2. 创建一个调用 .EXE 文件的 UDF,并运行类似于“从 TargetTable 中选择 UDFNAME(Image_Col)”的 SQL 查询。

我想我正在寻找的是创建光标会增加多少开销的想法,而不是作为一个集合来做?

一些附加信息:

  • 在这种情况下,集合的大小是最大值。1000
  • 正如下面提到的答案,如果使用 UDF 作为一组完成,这是否意味着外部程序一次打开 1000 次?或者是否有针对此的优化?显然,在多处理器系统上,运行多个进程实例可能不是一件坏事,但 1000 个可能有点多。
4

2 回答 2

1

在这种情况下定义集基?如果您有 100 行,这会一次打开应用程序 100 次吗?我会说测试,只是因为您可以从 UDF 调用扩展过程,我仍然会为此使用游标,因为在这种情况下 setbased 无关紧要,因为您没有直接操作表中的数据

于 2009-02-09T20:58:39.800 回答
1

我做了一些测试和试验,当在 UDF 中完成时,它确实一次处理每一行 - SQL 服务器不会为 100 行中的每一行运行 100 个进程(我认为它不会)。

但是,我仍然认为将其作为 UDF 而不是作为光标执行会更好,因为我的研究倾向于表明,必须在光标中提取数据的额外开销会减慢速度。它可能不会产生很大的不同,但与首先将所有数据拉到临时表中相比,它可能会节省时间。

于 2009-02-10T16:40:49.997 回答