佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化(主從表的設(shè)計(jì))

數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化(主從表的設(shè)計(jì))

熱門(mén)標(biāo)簽:網(wǎng)站排名優(yōu)化 百度競(jìng)價(jià)排名 AI電銷(xiāo) Linux服務(wù)器 鐵路電話系統(tǒng) 服務(wù)外包 地方門(mén)戶(hù)網(wǎng)站 呼叫中心市場(chǎng)需求

舉一個(gè)例子,我現(xiàn)在有一些新聞信息,它包括這些字段;新聞ID,新聞Name,新聞ShortIntro,新聞Detail,新聞PublishTime。我現(xiàn)在要把它存放在數(shù)據(jù)庫(kù)中,然后從數(shù)據(jù)庫(kù)中將其取出來(lái)放在GridView中分頁(yè)顯示。

我現(xiàn)在就以一種我所見(jiàn)過(guò)的常見(jiàn)的思維方式來(lái)一步一步模擬這個(gè)實(shí)現(xiàn)過(guò)程。

第一步:建立新聞數(shù)據(jù)表。

在這一步,很多人都會(huì)直接建一張News表,里面包括了上面說(shuō)的那些字段。

第二步:查詢(xún)數(shù)據(jù)。

寫(xiě)一個(gè)方法,把News表中滿(mǎn)足查詢(xún)條件的數(shù)據(jù)取出來(lái)放在DataSet(DataTable)中,作為數(shù)據(jù)源。

第三步:綁定到GridView。

設(shè)置GridView的分頁(yè)屬性,將上面查詢(xún)得到的數(shù)據(jù)源綁定到GridView,實(shí)現(xiàn)數(shù)據(jù)在GridView中的分頁(yè)顯示。

上面就是我們常見(jiàn)的做法了。

我的做法會(huì)是這樣:

第一步:建立新聞數(shù)據(jù)主-從表

我們?cè)谙到y(tǒng)開(kāi)發(fā)過(guò)程中會(huì)發(fā)現(xiàn),其實(shí)在一條的完整的數(shù)據(jù)信息中,其實(shí)很多時(shí)候,很多列表項(xiàng)并不會(huì)用到。我們分析News信息,我們可以初步的把ID,Name,ShortIntro,PublishTime作為主要信息,我們將這些信息集中起來(lái),新建一張表News(ID,Name,ShortIntro,PublishTime),另外一個(gè)字段Detail放在另一張從表中,新建一張表NewsDetail(ID,Detail,NewsID)。這樣做有什么好處呢,首先我們降低了表的“重量”。我們將最重要,最常用的信息簡(jiǎn)化出來(lái)放在一個(gè)主表中,這樣在使用過(guò)程中,我們只需要從這張住表中獲取我們所需的數(shù)據(jù)就可以了,而不需要像第一種方法一樣遍歷所有字段,這減少了數(shù)據(jù)庫(kù)查詢(xún)的時(shí)間,提高了性能。主-從表建立的原則是,將最重要的,最常用的分離出來(lái)作為主表,將那些描述性的,內(nèi)容龐大的作為從表。

第二步:編寫(xiě)適合的SQL語(yǔ)句。

我們應(yīng)該為不同的功能實(shí)現(xiàn)編寫(xiě)適合的SQL語(yǔ)句。上面那種方法中,用一個(gè)方法查詢(xún)出了所有的數(shù)據(jù)信息,這是滿(mǎn)足所有場(chǎng)合的數(shù)據(jù)要求的。但是,我們并不需要這么多的數(shù)據(jù)內(nèi)容,多余的數(shù)據(jù)內(nèi)容耗費(fèi)了我們大量的時(shí)間和空間。我們往往只需要其中的部分內(nèi)容,比如說(shuō)主要信息。這也印證了為什么我們上面要建立主-從表。我們?cè)诮⒘酥?從表之后,為滿(mǎn)足各種場(chǎng)合,可以編寫(xiě)以下幾種方法:GetNews(int? ID, string Name)//從主表中查詢(xún)滿(mǎn)足條件的數(shù)據(jù),GetNewsDetail(int? ID, string Name)//從主表和從表中查詢(xún)滿(mǎn)足條件的數(shù)據(jù)。第一種方法提供了新聞主要信息,第二種方法提供了全面的信息,這兩種方法基本上就能滿(mǎn)足所有場(chǎng)景且不會(huì)帶來(lái)過(guò)多的數(shù)據(jù)冗余。這里還要指出一點(diǎn),有些人喜歡這么寫(xiě)GetNewsByID(int? ID ),GetNewsByName(string Name),這樣寫(xiě)是很靈活,很有針對(duì)性,但是這樣寫(xiě)完全沒(méi)必要。

第三步:分頁(yè)綁定。

上面那種方法是一次性取出所有數(shù)據(jù)給GridView,讓控件自己去分頁(yè),這樣做方便省事。但是會(huì)有幾個(gè)問(wèn)題:

(1)數(shù)據(jù)量大。因?yàn)槭且淮涡匀〕鏊袧M(mǎn)足條件的數(shù)據(jù),所以數(shù)據(jù)量比較大,而這些數(shù)據(jù)是都需要放在內(nèi)存中的,所以會(huì)影響系統(tǒng)性能。而且在初次載入時(shí)會(huì)有些卡,給人的感覺(jué)是系統(tǒng)加載不平順。

(2)我們并不需要這么多數(shù)據(jù)。為什么我要這么說(shuō)呢?研究用戶(hù)的使用習(xí)慣我們會(huì)發(fā)現(xiàn),用戶(hù)大多數(shù)情況下并不會(huì)逐頁(yè)的去瀏覽數(shù)據(jù),用戶(hù)關(guān)注的往往是前幾頁(yè)的前幾條。所以取出來(lái)的數(shù)據(jù)很多時(shí)候并沒(méi)有被用戶(hù)查看。

所以在這里,使用分頁(yè)查詢(xún)的方式是更加合適的。每次只從數(shù)據(jù)庫(kù)里面查詢(xún)一頁(yè)數(shù)據(jù),這樣系統(tǒng)負(fù)載小,頁(yè)面載入平順,而且完全能夠滿(mǎn)足用戶(hù)的使用要求。有些人會(huì)問(wèn),你這樣做不是會(huì)增加數(shù)據(jù)庫(kù)IO次數(shù),我想說(shuō)的是,一次性獲取大量冗余數(shù)據(jù),并要承擔(dān)冗余所帶來(lái)的持久影響與這些比理論上增加的IO次數(shù)(用戶(hù)并不會(huì)逐頁(yè)查看,也就并不會(huì)產(chǎn)生那么多次分頁(yè)查詢(xún))要小得多的訪問(wèn)相比,分頁(yè)查詢(xún)具有不可否定的優(yōu)勢(shì)。

您可能感興趣的文章:
  • mysql數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化 mysql效率
  • 海量數(shù)據(jù)庫(kù)的查詢(xún)優(yōu)化及分頁(yè)算法方案
  • 優(yōu)化MySQL數(shù)據(jù)庫(kù)中的查詢(xún)語(yǔ)句詳解
  • 海量數(shù)據(jù)庫(kù)的查詢(xún)優(yōu)化及分頁(yè)算法方案集合1/2
  • 海量數(shù)據(jù)庫(kù)的查詢(xún)優(yōu)化及分頁(yè)算法方案集合2/2
  • 數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化之子查詢(xún)優(yōu)化
  • 一次數(shù)據(jù)庫(kù)查詢(xún)超時(shí)優(yōu)化問(wèn)題的實(shí)戰(zhàn)記錄

標(biāo)簽:崇左 黃山 衡水 仙桃 銅川 湖南 湘潭 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化(主從表的設(shè)計(jì))》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266
    城固县| 临高县| 宁夏| 阿拉善右旗| 博客| 海口市| 台州市| 北辰区| 九龙坡区| 四会市| 尚志市| 天水市| 上高县| 中西区| 关岭| 延庆县| 盐源县| 镇巴县| 塔城市| 鄂托克旗| 星子县| 柳江县| 江陵县| 汉源县| 旬阳县| 定西市| 隆子县| 铜川市| 淄博市| 玉环县| 留坝县| 崇阳县| 通化县| 许昌市| 蒲江县| 上虞市| 太谷县| 普定县| 榆林市| 吴忠市| 临汾市|