資料庫查詢優化 主從表的設計

2022-09-21 10:24:09 字數 1841 閱讀 1806

舉乙個例子,我現在有一些新聞資訊,它包括這些字段;新聞id,新聞name,新聞shortintro,新聞detail,新聞publishtime。我現在要把它存放在資料庫中,然後從資料庫中將其取出來放在gridview中分頁顯示。

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

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

在這一步,很多人都會直接建一張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),這樣寫是很靈活,很有針對性,但是這樣寫完全沒必要。

第三步:分頁繫結。

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

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

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

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

本文標題: 資料庫查詢優化(主從表的設計)

本文位址:

資料庫查詢優化 主從表的設計

寫過許多的資料庫查詢語句,面對過許多的問題,也在磕磕碰碰中學到了很多東西。昨天在看系統資料庫設計與sql 時,突然 發現 了許多平常不屑看到的問題,於是就萌生了把它提出來思考的念頭 舉乙個例子,我現在有一些新聞資訊,它包括這些字段 新聞id,新聞name,新聞shortintro,新聞detail,...

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫表設計 備份記錄的表設計優化

需求場景 由於mysql沒有類似於sql server那樣的系統表來存放備份記錄,且大規模的mysql伺服器需要集中管理和檢視。伺服器出現效能問題或複製延遲時,需要先判斷是否由資料備份引起。第一版按照需求,考慮到需要記錄的備份資訊有備份伺服器資訊 備份開始結束時間 備份是否成功等訊息,於是設計出第一...