我有大約14,000行數據。如果使用以下EF查詢,需要很長時間才能加載,因爲我懷疑它正在加載所有14,000行,只有這樣才能完成所有額外的過濾。這是我的存儲庫中的Select方法。如何優化此EF查詢並實現分頁?
Public Function SelectAll() As IEnumerable(Of be_Posts) Implements IPostRepository.SelectAll
Dim posts As IEnumerable(Of be_Posts)
Using db As Ctx = New Ctx
posts = db.be_Posts.OrderByDescending(Function(x) x.DateCreated).ToList
Return posts
End Using
和控制器:
Function Index(page As Integer?) As ActionResult
Dim PageSize = System.Web.Configuration.WebConfigurationManager.AppSettings("PageSize")
Dim pageNumber As Integer = If(page, 1)
Dim posts = _repo.SelectAll()
Return View(posts.ToPagedList(pageNumber, PageSize))
End Function
助手在查看:
@Html.PagedListPager((Model), Function(page) Url.Action("Index", New With { _
.page = page _
}), PagedListRenderOptions.ClassicPlusFirstAndLast)
現在,如果在一個take
子句添加,例如.Take(500)
那麼事情正在顯着加快。我怎樣才能使這個查詢更快,仍然工作將所有的記錄?我也使用Troy Goode的PagedList擴展來獲得分頁功能。一切都很好,只要我只有幾百條記錄。那麼該怎麼辦?大部分(如果不是全部)分頁的例子,我可以發現使用特洛伊的庫包含直接在控制器中的所有代碼。
創建日期時是否存在某種索引,以便SQL Server可以高效地找到第一個X記錄?你應該返回一個IQueryable –