假設我的SQL數據庫中有兩個表。 1,一箇中等大小的表與成千上萬的記錄叫MYTABLE1 2.大桌數百萬條記錄(和與日俱增)稱爲MyTable2使用LINQ to Entities多次枚舉大型數據集
MYTABLE1和MyTable2都有一個叫做哈希屬性,可以相等。
我正在尋找使用Linq to Entities迭代MyTable1並查找MyTable2中具有相同散列並保存到另一個表中的所有記錄的最有效方法。以下是代碼外觀的簡化視圖。
using(var db = new context()) {
var myTable1Records = db.MyTable1.Select(x => x);
foreach(var record in myTable1Records) {
var matches = db.MyTable2.Where(y => y.Hash.Equals(record.Hash)).Select(y => y);
foreach(var match in matches) {
// Add match to another table
}
}
}
我看到這個代碼的性能顯着減慢,因爲MyTable2的大小每天都在變大。我正在嘗試用於有效處理這種情況的一些想法是:
- 在db.MyTable2上設置MergeOption.NoTracking,因爲它純粹是讀取操作。遺憾的是,還沒有看到很多改進。
- 使用.ToList()將MyTable2拉入內存中以消除對db的多次調用創建MyTable2的「代碼塊」,以便代碼可以遍歷,因此每次都不會查詢全部百萬條記錄。
我很想看看有沒有其他技術或魔法彈可以在這種情況下有效。謝謝!
檢查? – MoZahid
您是否必須爲c#帶來數百萬個值才能完成RDMS可以非常有效地完成的任務? –
這可能有點偏離使用Linq的主題,但是如何在這兩個基於'Hash'字段連接的表中創建一個視圖,然後查詢連接的表? - 讓你的數據庫在這部分爲你做好工作......這就是它被優化的原因! –