我得到了這個查詢,在生產環境中非常慢。我想知道爲什麼以及是否有更好的方法來達到同樣的結果。爲什麼我的linq到SQL查詢很慢?
public async Task<Membership> FindByEmailByAccessL1OrL3OrL4Async(string email)
{
return await (from m in this.Queryable()
where m.Email == email
&& (m.RoleMemberships.Select(r => r.RoleId).Contains(RoleConstants.ACCESSGRANTEDL1ID)
|| m.RoleMemberships.Select(r => r.RoleId).Contains(RoleConstants.ACCESSGRANTEDL3ID)
|| m.RoleMemberships.Select(r => r.RoleId).Contains(RoleConstants.ACCESSGRANTEDL4ID))
select m).SingleOrDefaultAsync();
}
簡而言之,此查詢的目的是通過電子郵件獲取用戶成員資格並繼續登錄。我有更多的用戶會員資格,這個查詢會更慢。
謝謝
大衛
編輯
this.Queryable()
是做select * from Memberships
的等價物。 Membership
表有許多角色,並且角色有許多成員。
此外,成員資格表最多需要12秒才能獲取240行的登錄信息。我必須按角色過濾,因爲系統中的電子郵件值不是唯一的。只有一些角色才能訪問登錄,並且這些角色將擁有唯一的電子郵件。這就是爲什麼我必須過濾。此查詢返回一個成員資格以繼續進行登錄,該查詢通過上面的查詢進行選擇。所以沒有IQueryable
,IEnumerable
或List
,只是SingleOrDefault
值。
'this.Queryable()'???你不提供太多的信息..什麼是「這個」? Queryable()方法返回什麼?顯示該代碼? – user3185569
對不起!代碼位於存儲庫架構內。我在編輯部分提供了更多信息。 –
我們可能需要查看SQL表定義以及任何索引。 – RBarryYoung