2012-03-28 34 views
0

我只是寫一個測試應用程序,以瞭解如何優化大量記錄的搜索,以顯示在gridview中。如何優化我的搜索?

目前,我有一個測試表,有20,000個記錄(目前沒有索引),我正在尋找在我的gridview中以20個批次顯示記錄。我不確定如何做到這一點,但我試圖理解它背後的理論。

namespace TestingIndexes 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void btnStart_Click(object sender, EventArgs e) 
    { 
     gvResults.DataSource = GetContacts(); 
     gvResults.DataBind(); 
    } 

    private List<Contact> GetContacts() 
    { 
     List<Contact> contacts = new List<Contact>(); 

     DataClasses1DataContext dc = new DataClasses1DataContext(); 

     // Track time elapsed 
     Stopwatch sw = new Stopwatch(); 
     sw.Start(); 

     var result = from c in dc.GetTable<Contact>() 
     select c; 

     sw.Stop(); 
     ltMessage.Text = "<p>Time elapsed: " + sw.ElapsedMilliseconds + "</p>"; 

     if (result.Count() > 0) 
     contacts = result.ToList<Contact>(); 

     return contacts; 
    } 
    } 
} 

正如你可以看到,這是一個使用LINQ一個非常簡單的查詢,我敢肯定,我不希望每次都帶來20,000條記錄到內存中,以便將其綁定到GridView。什麼是替代雖然?我想我要做的是最終查詢數據庫以找出有很多記錄,但是一次只能在gridview中顯示20條記錄。這是由SQL Server處理的東西嗎?我確信必須有關於我想要做的事情的文章,但我不完全確定我應該尋找什麼。任何指向教程的指針或鏈接都會非常有幫助!

任何人都可以幫助指向正確的方向嗎?

+2

傳呼......... – 2012-03-28 12:14:31

+0

作爲使用代碼的一個附註,問題實際上會爲所有數據查詢數據庫兩次,一次用於「Count()」操作,一次用於「ToList()」操作。我的規則是從來沒有(如果可以避免)使用擴展方法'Count()' – Magnus 2012-03-28 12:47:19

+0

那麼如何檢查有沒有使用.Count()返回的記錄? – alimac83 2012-03-28 15:26:19

回答

4

您應該使用SkipTake從數據庫表中獲取部分數據。

var result = dc.GetTable<Contact>().Skip(40).Take(20).ToList(); 
+0

謝謝 - 這清除了如何檢索所需的記錄。然而,我對於在哪裏存儲數據的「大量」感到困惑。例如,我是否查詢數據庫並將所有記錄提取到內存中,然後使用跳過/執行此操作?或者有沒有更有效的方法呢?請原諒我可憐的措辭,但是可以提取所有記錄並將它們存儲在sql服務器的臨時結果表中,然後使用此結果集的跳過/獲取? – alimac83 2012-03-28 12:37:06

+0

不,要在我的答案中查詢將被翻譯成SQL,將只會檢索指定的行 – Magnus 2012-03-28 12:38:49

+0

但這沒有任何意義。記錄需要存儲在一張臨時表中供您通過?否則記錄可能會添加到數據庫,而您的分頁會扭曲結果... – alimac83 2012-03-28 12:46:19

0

首先,去年和百達建在桌子上(羣集)指數覆蓋理想要返回以及行的索引。如果你不那麼SQL會遍歷所有的記錄。如果覆蓋索引就位,SQL將只訪問索引。如果你想了解SQL,那麼可能沒有比Kalen Delaney的http://www.sqlserverinternals.com/更好的源碼了。 「覆蓋索引」以及更多都是清晰地解釋,甚至表面上理解她書中的內容會使你成爲一個更好的開發者哦,並且有http://en.wikipedia.org/wiki/Database_index