最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2013年08月04日 14:42:21   作者:  
寫過許多的數(shù)據(jù)庫查詢語句,面對過許多的問題,也在磕磕碰碰中學(xué)到了很多東西。昨天在看系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)與SQL代碼時(shí),突然“發(fā)現(xiàn)”了許多平常不屑看到的問題,于是就萌生了把它提出來思考的念頭

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

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

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

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

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

寫一個(gè)方法,把News表中滿足查詢條件的數(shù)據(jù)取出來放在DataSet(DataTable)中,作為數(shù)據(jù)源。

第三步:綁定到GridView。

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

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

我的做法會是這樣:

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

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

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

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

第三步:分頁綁定。

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

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

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

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

相關(guān)文章

  • SQLServer 2005 和Oracle 語法的一點(diǎn)差異小結(jié)

    SQLServer 2005 和Oracle 語法的一點(diǎn)差異小結(jié)

    Microsoft SQL Server 和Oracle 語法的一點(diǎn)差異小結(jié),需要的朋友可以參考下。
    2011-04-04
  • Navicat for SQLite安裝使用教程 附安裝包

    Navicat for SQLite安裝使用教程 附安裝包

    這篇文章主要介紹了Navicat for SQLite安裝教程 附安裝包,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • IDEA連接達(dá)夢數(shù)據(jù)庫的詳細(xì)步驟

    IDEA連接達(dá)夢數(shù)據(jù)庫的詳細(xì)步驟

    這篇文章主要給大家介紹了在 IntelliJ IDEA 中連接達(dá)夢數(shù)據(jù)庫的詳細(xì)步驟,文章通過圖片介紹的流程步驟非常詳細(xì),感興趣的同學(xué)跟著小編一起來看看吧
    2023-08-08
  • 有效防止SQL注入的5種方法總結(jié)

    有效防止SQL注入的5種方法總結(jié)

    SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實(shí)現(xiàn)攻擊,而是針對程序員編程時(shí)的疏忽,通過SQL語句,實(shí)現(xiàn)無帳號登錄,甚至篡改數(shù)據(jù)庫。下面這篇文章主要給大家介紹了關(guān)于防止SQL注入的5種方法,教大家有效的防止sql注入,需要的朋友可以參考學(xué)習(xí)。
    2017-03-03
  • 在PostgreSQL的基礎(chǔ)上創(chuàng)建一個(gè)MongoDB的副本的教程

    在PostgreSQL的基礎(chǔ)上創(chuàng)建一個(gè)MongoDB的副本的教程

    這篇文章主要介紹了在PostgreSQL的基礎(chǔ)上創(chuàng)建一個(gè)MongoDB的副本的教程,使在使用NoSQL的同時(shí)又能用到PostgreSQL中的東西,需要的朋友可以參考下
    2015-04-04
  • SQLite數(shù)據(jù)庫中如何獲取新插入數(shù)據(jù)的自增長ID

    SQLite數(shù)據(jù)庫中如何獲取新插入數(shù)據(jù)的自增長ID

    SQLite數(shù)據(jù)庫中有一有列名為ID的自增列,項(xiàng)目需求要在向數(shù)據(jù)庫在插入新數(shù)據(jù)的同時(shí)返回新插入數(shù)據(jù)行的ID,這篇文章主要介紹了SQLite數(shù)據(jù)庫中如何獲取新插入數(shù)據(jù)的自增長ID,需要的朋友可以參考下
    2024-04-04
  • 如何解決VisualSVN Server 安裝提示錯(cuò)誤 Repositories is not a valid short file name

    如何解決VisualSVN Server 安裝提示錯(cuò)誤 Repositories is not a valid shor

    最近在程序中安裝VisualSVN Server時(shí),總是提示“'Repositories' is not a valid short file name”這個(gè)問題,難為了好長時(shí)間,最終解決,下面小編把我的解決辦法分享給大家,供大家參考
    2015-09-09
  • 使用DataGrip的詳細(xì)教程

    使用DataGrip的詳細(xì)教程

    這篇文章主要介紹了使用DataGrip的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • 把Navicat中數(shù)據(jù)庫所有表導(dǎo)出的方法

    把Navicat中數(shù)據(jù)庫所有表導(dǎo)出的方法

    通過Navicat導(dǎo)出數(shù)據(jù)庫中的數(shù)據(jù)是比較常用的操作之一,下面這篇文章主要給大家介紹了關(guān)于如何把Navicat中數(shù)據(jù)庫所有表導(dǎo)出的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 舉例簡單介紹PostgreSQL中的數(shù)組

    舉例簡單介紹PostgreSQL中的數(shù)組

    這篇文章主要介紹了舉例簡單介紹PostgreSQL中的數(shù)組,PostgreSQL是一個(gè)高性能關(guān)系型數(shù)據(jù)庫,學(xué)習(xí)PostgreSQL將成為趨勢,需要的朋友可以參考下
    2015-04-04

最新評論

蒙城县| 蓬溪县| 毕节市| 渑池县| 上栗县| 五华县| 揭东县| 泉州市| 南澳县| 沛县| 邢台县| 潜江市| 上饶市| 满洲里市| 筠连县| 留坝县| 遂宁市| 乳源| 鄂托克前旗| 故城县| 谢通门县| 甘孜| 定远县| 新宁县| 岑巩县| 右玉县| 北宁市| 广元市| 阳春市| 富锦市| 胶州市| 台安县| 泸溪县| 长汀县| 永和县| 镇江市| 博野县| 泌阳县| 册亨县| 太仓市| 宜州市|