[英]Linq to Entities : Count is very slow
我需要在查詢中使用parent和parent.child.count()....當我這樣做時需要20秒....它不是一個龐大的數據庫...任何優化的想法......
var plist = context.persons
.Select(p => new
{
p.fullName,
c.personID,
p.Status,
p.Birthdate,
p.Accounts.Count
}).ToList();
這篇文章是關於在你真正想要使用any()時使用count()的好文章
你需要使用.count還是可以使用.any?
由於這是實體框架,請打開sql profiler並查看正在向數據庫發送的SQL查詢。 聽起來您可能會看到發送單個查詢以獲取組標識符,然后另一組查詢(每個組一個)可能正在獲取計數。 如果發生這種情況,您必須發布linq查詢給某人以解決問題。
根據您發送的代碼,看起來事情應該花費那么長時間。 我有一些建議:
Count()
花費的時間多得多。
.ToList()
之前使用.ToList()
.Take(int)
方法,以獲得所需數量的條目。 如果您可以描述如何使用此數據,或提供SQL執行的屏幕截圖,我們可以提供更多反饋。
我有一個類似的問題,我嘗試了這些並且更好地解決了:
child.count(x => x.paretnID == inputParentID)child.where(x => x.parentID == inputParentID)
我的原始代碼在每次迭代時花了大約15-20秒: return(isEdit)? db.ChasisBuys.Single(x => x.ChasisBuyID == long.Parse(Request.QueryString [“chbid”]))。Chasises.Count(y => y.Bikes.Count> 0 && y.ColorID == buyItems [(int)index] .ColorID && y.ChasisTypeID == buyItems [(int)index] .ChasisTypeID).ToString():“ - ”;
運行良好的新代碼是:
**return (isEdit) ? db.Chasises.Where(x => x.ChasisBuyID == long.Parse(Request.QueryString["chbid"])).Count(y => y.Bikes.Count > 0 && y.ColorID == buyItems[(int)index].ColorID && y.ChasisTypeID == buyItems[(int)index].ChasisTypeID).ToString() : "-";**
數據庫在chasises中有大約1000條記錄,在chasisBuys中大約有5條記錄,在自行車中大約有20條。 我的觀點是Linq to SQL查詢不會在邏輯語句中進行預先評估,例如,如果你寫“return a && b && c;” 如果語句a是false,則其他語句不會被評估,我在linq中期待這樣的事情,但事實並非如此。
我使用GroupBy方法解決了類似的問題。
IEnumerable> accounts = Accounts.GroupBy(x => x.personID); accounts.Count()將返回屬於該人的帳戶數。 accounts.Key將返回組的personID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.