2013-04-07 76 views
0

有人問我跑DB轉換後沉重的更新,對於訂單ID的一個給定的名單,手柄記錄

我需要打開名冊和處理每個ID。

例如:

- 客戶表:

創建表CustOrders (ID INT, CustFName VARCHAR(10), CustLname VARCHAR(10), 主鍵(ID) )

對於列表中的每個id,存儲過程將更新該記錄。

我的第一個念頭是:

  1. 創建它接受的ID(用表值參數)的列表存儲過程。

  2. 每個ID,做我的東西

但後來我意識到這將需要爲我想出了一個主意

太多的時間和有和嘗試,並在運行並行模式,例如:

嘗試運行幾個存儲的過程,其中每個存儲的過程處理不同批量的ID的,

通過Mod運算符分例如 。

這就是我決定發佈這個問題的原因,也許你有一個更好的想法,如何編寫可以並行模式運行的程序。

+0

更新它如何?如果您提供更多詳細信息,則可能會向您展示如何在不逐一進行的情況下執行此操作(這肯定會比一次更新所有代價更高,SQL Server非常擅長,或者至少分批例如,一次10000行)。無論何時您在SQL Server中工作,並且認爲「我需要一次執行x行」,並再次思考,因爲在大多數情況下,這是錯誤的方式。 – 2013-04-07 19:21:31

+0

還有誰的要求是這些更新並行運行?有人認爲可以同時對同一頁面進行兩次更新嗎?儘管可以根據聚集索引將更新分成不同的批次,但這隻有在表上沒有聚集索引時纔有所幫助,並且在協調時仍然很痛苦。爲什麼不告訴我們你是如何更新的,獲取最有效方法的建議,然後*看看是否存在性能問題。與其告訴我們您需要通過並行化來解決性能問題。 – 2013-04-07 19:23:06

回答

0

這是一個分區表嗎?如果不運行並行更新可能不會有幫助。它在另一端仍然是一組寫頭。

+0

Thx爲您的意見。 – TheRunningDBA 2013-04-07 19:41:45