2017-06-01 50 views
0

我想從數據庫中獲取數據,以便在頁面上顯示。表中有大量的行,所以我使用頁面來避免永久滾動。以最快的方式過濾,排序和分頁方法

我有搜索單詞(沒有特定列)的功能,按任意列排序,並且顯然改變頁面大小和我在哪個頁面上。

我可以,理論上,只需要詢問數據庫中的所有內容(SELECT * FROM myTable),將其發送到我的html視圖,並完整處理javascript中的數據。問題是,有太多的數據,使用我的結構(頁面控制器調用我的主邏輯,它調用一個調用數據庫的webservice)的速度非常慢,有時會等待最多20秒的頁面原始負載。加載後,JavaScript通常很快。

或者,我可以使用Linq在控制器中完成大部分工作。我也可以在web服務(這是我的)中工作,仍然在Linq。或者,我可以直接使用WHERE,ORDER BY,COUNT和一堆動態SQL請求,這樣我就可以立即從數據庫中獲得我想要的東西。但是,每當參數發生變化時,任何這些都會迫使我刷新頁面。

所以我想知道性能。例如,這之間實現更快:

var listObjects = ExecuteSQL("SELECT * FROM myTable"); 
return listObjects.Where(x => x.field == word).OrderBy(x => x.field); 

var listObjects = ExecuteSQL("SELECT * FROM myTable WHERE field = :param1 ORDER BY field", word); 
return listObjects; 

而具體在什麼會利用我所提到的是好還是壞的不同方法的情況?

回答

0

你想要做你的數據服務器選擇數據塊(pagefull)的工作。這是工作;它知道如何做到最好。

因此,忘記ExecuteSQL。你幾乎關閉了一切能夠幫助你的能力。試試LINQ:

var page = (from m in MyTable 
      m.field = param1 
      orderby m.field 
      select m) 
      .Skip((nPage-1)*pageLength).Take(pageLength); 

這將生成確切的SQL告訴數據服務器只返回所需的行。