我正在執行一個使用PetaPoco的SQL查詢,通常會返回大約4000行。使用Paged Fetch時性能下降
這裏是構建SQL代碼:
var sql = PetaPoco.Sql.Builder
.Append("Select ")
.Append("Participants.ParticipantID")
.Append("From Participants")
.Append("Inner Join Organizations")
.Append("On Participants.OrgID = Organizations.OrgID")
.Append("Left Join Departments")
.Append("On Participants.DepartmentID = Departments.DepartmentID")
.Append("Where")
.Append("Participants.OrgID = @0", 6328);
.Append("and Participants.Last_Name like @0", "P%");
.Append("and ")
.Append("Participants.OrgID in ")
.Append(" (")
.Append(" Select")
.Append(" OrgID ")
.Append(" from ")
.Append(" Organizations")
.Append(" Where")
.Append(" AssociationID = @0", 318)
.Append(" )");
如果我拉整個記錄背部和使用LINQ頁面結果,頁面呈現在約250毫秒。這裏是代碼:
List<ParticipantVMItem> PagedResult = null;
var FullResult = db.Fetch<ParticipantVMItem>(sql);
PagedResult = FullResult.Skip((PageNo - 1) * PageSize).Take(PageSize).ToList();
如果我嘗試使用內置到PetaPoco中的分頁功能,頁面需要超過4200ms才能呈現。下面是代碼:
List<ParticipantVMItem> PagedResult = null;
PagedResult = db.Fetch<ParticipantVMItem>(4, 250, sql);
有什麼奇怪的是一瞥和SQL事件探查器告訴我,在這兩種情況下運行的實際SQL命令需要的時間大致相同的長度。但是Glimpse表明,在第二種情況下,延遲發生在連接打開之前。任何人都可以解釋這種行爲嗎?
更多信息:我在運行SQL Server 2008R2
我會用我的sqlcode更新我的問題。 – Aheho
你有與NPoco相同的問題嗎?你可以試試嗎?它使用diff正則表達式。 – Schotime
我已經將問題隔離到以下REGEX: \t \t \t \t public static Regex rxOrderBy = new Regex(@「\ bORDER \ s + BY \ s +(?!。*?(?:\)| \ s +)AS \)(??((?(?))((??) 。])+(?:\ s +(?: ASC | DESC))?(?:\ s *,\ s *(?:\((?> \((?)| \)(?<-depth>) 。*)*(?(depth)(?!))\)| [\ w \(\)\。])+(?:\ s +(?: ASC | DESC))?)*「,RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled); –
Aheho