資料庫查詢最佳化(主從表的設計)

來源:互聯網
上載者:User

舉一個例子,我現在有一些新聞資訊,它包括這些欄位;新聞ID,新聞Name,新聞ShortIntro,新聞Detail,新聞PublishTime。我現在要把它存放在資料庫中,然後從資料庫中將其取出來放在GridView中分頁顯示。

我現在就以一種我所見過的常見的思維方式來一步一步類比這個實現過程。

第一步:建立新聞資料表。

在這一步,很多人都會直接建一張News表,裡麵包括了上面說的那些欄位。

第二步:查詢資料。

寫一個方法,把News表中滿足查詢條件的資料取出來放在DataSet(DataTable)中,作為資料來源。

第三步:綁定到GridView。

設定GridView的分頁屬性,將上面查詢得到的資料來源綁定到GridView,實現資料在GridView中的分頁顯示。

上面就是我們常見的做法了。

我的做法會是這樣:

第一步:建立新聞資料主-從表。

我們在系統開發過程中會發現,其實在一條的完整的資料資訊中,其實很多時候,很多清單項目並不會用到。我們分析News資訊,我們可以初步的把ID,Name,ShortIntro,PublishTime作為主要資訊,我們將這些資訊集中起來,建立一張表News(ID,Name,ShortIntro,PublishTime),另外一個欄位Detail放在另一張從表中,建立一張表NewsDetail(ID,Detail,NewsID)。這樣做有什麼好處呢,首先我們降低了表的“重量”。我們將最重要,最常用的資訊簡化出來放在一個主表中,這樣在使用過程中,我們只需要從這張住表中擷取我們所需的資料就可以了,而不需要像第一種方法一樣遍曆所有欄位,這減少了資料庫查詢的時間,提高了效能。主-從表建立的原則是,將最重要的,最常用的分離出來作為主表,將那些描述性的,內容龐大的作為從表。

第二步:編寫適合的SQL語句。

我們應該為不同的功能實現編寫適合的SQL語句。上面那種方法中,用一個方法查詢出了所有的資料資訊,這是滿足所有場合的資料要求的。但是,我們並不需要這麼多的資料內容,多餘的資料內容耗費了我們大量的時間和空間。我們往往只需要其中的部分內容,比如說主要資訊。這也印證了為什麼我們上面要建立主-從表。我們在建立了主-從表之後,為滿足各種場合,可以編寫以下幾種方法:GetNews(int? ID, string Name)//從主表中查詢滿足條件的資料,GetNewsDetail(int? ID, string Name)//從主表和從表中查詢滿足條件的資料。第一種方法提供了新聞主要資訊,第二種方法提供了全面的資訊,這兩種方法基本上就能滿足所有情境且不會帶來過多的資料冗餘。這裡還要指出一點,有些人喜歡這麼寫GetNewsByID(int? ID ),GetNewsByName(string Name),這樣寫是很靈活,很有針對性,但是這樣寫完全沒必要。

第三步:分頁綁定。

上面那種方法是一次性取出所有資料給GridView,讓控制項自己去分頁,這樣做方便省事。但是會有幾個問題:

(1)資料量大。因為是一次性取出所有滿足條件的資料,所以資料量比較大,而這些資料是都需要放在記憶體中的,所以會影響系統效能。而且在初次載入時會有些卡,給人的感覺是系統載入不平順。

(2)我們並不需要這麼多資料。為什麼我要這麼說呢?研究使用者的使用習慣我們會發現,使用者大多數情況下並不會逐頁的去瀏覽資料,使用者關注的往往是前幾頁的前幾條。所以取出來的資料很多時候並沒有被使用者查看。

所以在這裡,使用分頁查詢的方式是更加合適的。每次只從資料庫裡面查詢一頁資料,這樣系統負載小,頁面載入平順,而且完全能夠滿足使用者的使用要求。有些人會問,你這樣做不是會增加資料庫IO次數,我想說的是,一次性擷取大量冗餘資料,並要承擔冗餘所帶來的持久影響與這些比理論上增加的IO次數(使用者並不會逐頁查看,也就並不會產生那麼多次分頁查詢)要小得多的訪問相比,分頁查詢具有不可否定的優勢。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.