我有一個包含230列和1200萬行的表。LINQ-to-Sql更新 - 性能問題
我需要更新EACH行的123個字段。
如果我嘗試使用LINQ-To-Sql執行此操作,則會得到System.OutOfMemory異常。
我知道如果禁用對象跟蹤,我不會收到OutofMemory錯誤。 但我認爲我不能執行更新,如果我禁用對象跟蹤。
更新它們的最佳方法是什麼?
我有一個包含230列和1200萬行的表。LINQ-to-Sql更新 - 性能問題
我需要更新EACH行的123個字段。
如果我嘗試使用LINQ-To-Sql執行此操作,則會得到System.OutOfMemory異常。
我知道如果禁用對象跟蹤,我不會收到OutofMemory錯誤。 但我認爲我不能執行更新,如果我禁用對象跟蹤。
更新它們的最佳方法是什麼?
這不是一個適合LINQ到SQL的任務,或者坦率地說任何ORM。你不要想以這種方式通過網絡拖動那麼多的數據兩次;理想情況下應該用純TSQL編寫,如果需要結合其他來源的數據,可能需要使用批量插入/ SqlBulkCopy
來填充單獨的表。
我肯定會建議你改變體系結構,將大表解耦爲幾個小表,並且絕對避免用於這些數據量的linq-to-sql。
以這種方式創建體系結構,即爲業務級別上的每個實體分配類,這些類將調用T-SQL查詢的存儲過程來更新數據訪問級別上的數據。
對於每一行,123字段的值是否會有所不同?他們可以用一些公式來計算嗎?換句話說,你可以使用單個SQL UPDATE語句來執行此操作嗎? – 2011-03-09 12:58:41
我假設你在每一行都設置了相同的數據,因爲你無法在內存中保存這麼多對象?簡單的答案是使用存儲過程,並將其拖入您的EDML文件中。 – Paddy 2011-03-09 12:59:14
230列聽起來可疑.... – 2011-03-09 12:59:28