2010-11-29 41 views
6

這可能是一個經常被問到的問題,但是到目前爲止我找不到令人信服的答案。在業務層或數據庫層上使用分頁排序數據的最佳做法是什麼?

在我的項目中,我需要爲一組大約2萬多條記錄進行分頁,這些記錄是多個表格的連接結果,並且需要在不同場景下以不同方式排序。

目前,在我前面2個選項:

1,通過使用數據庫層ie. where dl.[row_number] between @index*@size+1 and @index*@[email protected]存儲過程做到這一點。 這樣做的問題是,您將不得不爲每個排序單獨編寫Store Procs。

2,在業務邏輯層上做,然後在結果上面進行分頁和排序。 (ie. skip(), take()) 但是它既不是理想的,因爲你最終可能檢索20,000條記錄,但只有10條被使用

是否有任何標準的最佳實踐可用於此?在此先感謝

+1

您不必爲每個「where子句」執行單獨的存儲過程,因爲您可以執行諸如case和or語句之類的操作。 – jcolebrand 2010-11-29 01:50:00

回答

3

將此邏輯保留在數據庫層。

如果使用存儲過程,那麼它擴大到包括排序列(S),所以你可以返回正確的設置

0

如果這是一個多用戶的應用程序,將有可擴展性問題,除非你獲取結果爲單個顯示頁面並提交事務。

例如,每次用戶導航到下一頁時,網站上的分頁顯示應該執行新的查詢。另一種方法是將完整的20K結果保留在Web會話上下文中,這將不能很好地擴展。

由於用於排序的列名稱(或列索引)無法參數化,所以用於排序的SQL語言有一些輕微的煩惱。

相關問題