對於SQL Server 2008+中的大型表上的批量更新,我將不勝感激。SQL和VB.net winform的批量更新概念
目前我有一張有10,000行160列的表格。該表經常更新,每行取決於過程1到100列更改。使用'標準新手'表更新使用DataAdapter
是非常緩慢和不適合的。
追求的是尋找更快的方法。我試圖用批量大小微調DataAdapter.Update
,無論更重的更新需要10-15秒。同時SqlBulkCopy
在(球場)1-3秒內輸入整個表格。當更新過程在一個過程中發生30-50次時,10s-15s加起來!
作爲互聯網的自我思考,我的經驗存在差距,但是我認爲有兩種可能性可以在完成更新任務時更好。
從數據庫轉儲表內容並使用
SqlBulkcopy
重新填充表。將存儲過程與通過合併SQL語句傳遞給它的表一起使用。
主要問題是數據安全性,雖然這是一個本地單用戶應用程序,但需要有一種方法來處理錯誤回滾。根據我的理解,轉儲和替換會更簡單,但可能更容易出現數據丟失?存儲過程的設置要廣泛得多,因爲更新語句必須單獨輸入所有更新列並保留更改。除非有一個'更新*'聲明:)。
爲了保持這個簡短,我希望只保留這個概念級別,但會欣賞任何不同的想法或鏈接和建議。
編輯更多信息: 該表只有一個索引,ID列。它是將傳入(和更改)數據存儲到簡單數據表的簡單過程。並且更新可以是1行到1000行之間的任何地方。程序經常將信息存儲到數據庫,並且可以是一些或幾乎所有的列。爲每次更新構建存儲過程將是不可能的,因爲我不知道哪些數據將被更新,可以說所有列都將被更新(除了ID列和一些「硬」數據列),它取決於更新輸入是什麼。因此,除非我每次都列出幾乎所有的更新,否則沒有很好的調整對特定列的更新。在這種情況下,一個存儲過程就可以做到。
我認爲問題是使用當前數據適配器方法對數據庫進行「調用」的次數。
編輯: 3大約一個臨時表在哪裏我批量複製數據,然後有一個存儲過程做更新。這不會削減SQL流量嗎?我認爲這是dataadapter更新的問題。
編輯:發表了一個概念1試圖在這個線程的答案。
謝謝
您可以充實一點關於表的結構和更新嗎?桌子上有什麼索引(尤其是聚簇索引)?這些更新究竟發生的頻率如何?爲什麼? – mellamokb