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在這種情況下並不重要,因爲你不直接操縱表中的數據