我寫它看起來像這樣的代碼:加快LINQ查詢(從表中選擇數據)
using(var ctx = new myentitiesContext())
{
var currentLoggedUser = ctx.Users.FirstOrDefault(x=>x.Email==User.Identity.Name);
var items = ctx.Items.Where(x=>x.Sales>0 && x.UserId==currentLoggedUser.UserId).ToList();
}
正如你可以看到它是從數據庫中一個簡單的選擇。但棘手的部分是,有時我可以選擇大量的數據(一次50-100k條記錄)。所以我一直在想,有什麼方法可以調整LINQ在數據被從表中拉出時更快地執行?
我已經在我的表中創建了FK UserId中的索引,因此部分完成了。
我的問題是,有沒有什麼辦法可以通過上下文配置部分的一些調整來加速LINQ查詢,或者通過創建編譯查詢或者通過其他方法來加速LINQ查詢?
P.S.球員,會這樣的工作很好:
ctx.Configuration.AutoDetectChangesEnabled = false;
// my queries...
ctx.Configuration.AutoDetectChangesEnabled = true;
有各種方法可以告訴EF採取一些快捷方式,例如'AutoDetectChanges'標誌和'.AsNoTracking()',但加速查詢的絕對最佳方式是避免調用'.ToList()'直到您需要內存中所有元素的實際列表(在任何過濾器運行之後)。 – Scott
@Scott The .AsNoTracking是我的對象上下文的擴展方法嗎? – User987
「用戶」的主鍵是什麼?如果你使用Find來代替FirstOrDefault,那麼你可以節省一些時間。我也建議將主鍵值對用戶的身份進行緩存,以防止不斷查找它。 – Clint