1

我正试图优化存储过程我维护,并且想知道是否任何人都可以告诉我以下选项的性能好处/惩罚。对于我的解决方案,我基本上需要对存储在表格IMAGE列中的图像运行转换程序。转换过程位于外部.EXE文件中。这里是我的选择:SQL游标存储过程与使用UDF查询

  1. 目标表的结果拉入一个临时表中,然后使用游标去在每个行中的表和运行image列的存储过程。存储的proc呼叫到.EXE。

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

我想我正在寻找的是一个想法,多少开销将被添加创建的游标,而不是做一个集?

一些额外的信息:

  • 在这种情况下,集合的大小为最大。 1000
  • 正如下面的答案所提到的,如果以UDF集合的形式完成,这是否意味着外部程序一次会全部打开1000次?还是有优化到位?显然,在多处理器系统上,运行多个进程实例可能并不是一件坏事,但1000可能有点多。

回答

1

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

但是,我仍然认为将其作为UDF而不是光标会更好,因为我的研究倾向于表明必须在光标中提取数据的额外开销会减慢速度。它可能没有太大的区别,但它可以节省时间,而不是先将所有数据提取到临时表中。

1

在此上下文中定义集合基? 如果你有100行,这将打开一次100次的应用程序?我会说测试,只是因为你可以调用一个UDF的扩展pr​​oc我仍然会使用一个光标,因为setbased在这种情况下并不重要,因为你不直接操纵表中的数据