var recordsStates = from s in db.Record
join ss in db.Record_State
on s.Id equals ss.RecordId
join apct in db.RecordTypesContentMapping
on new { t1 = ss.RecordId } equals new { t1 = apct.ContentId } into ss_apct
from apct in ss_apct.DefaultIfEmpty()
where (apct.ContentSourceName == null || apct.ContentSourceName == nameof(Record))
&& ss.isCurrent && ss.StateId == (int)RecordStateType.Publish
&& !ss.isDeleated && !s.isDeleted
&& (searchRecords.CategoryIds.Count == 0 || searchRecords.CategoryIds.Contains((int)s.CategoryId))
&& (string.IsNullOrEmpty(searchRecords.RecordTitle) || (string.IsNullOrEmpty(s.RecordNameModified) ?
s.RecordName.Contains(searchRecords.RecordTitle) :
s.RecordNameModified.Contains(searchRecords.RecordTitle)))
每個表大約有 100 萬條記錄。
如果我將 RecordTitle 發送為空,則大約需要 7-8 秒;如果不是空的,則需要 4-5 秒。
我嘗試在主題標題等上應用 NC 索引。它的型別nvarchar(1000)
。
每個表都通過外鍵關聯。我現在不知道是什么讓它變慢了。
uj5u.com熱心網友回復:
問題可能是笛卡爾爆炸
您可以通過 linq to sql 提高查詢性能(如您所愿),也可以使用拆分查詢*。
- 請注意:拆分查詢可能會導致臟資料問題,請認為您的第一個 sql 查詢已完成,但在第二個 sql 查詢開始之前可能會因另一個請求而發生資料更改,因此第二個查詢將繼續使用舊資料。
拆分查詢使用 msdn
笛卡爾爆炸
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/507002.html