• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            聚集索引的重要性和如何選擇聚集索引

              在上一節(jié)的標(biāo)題中,筆者寫的是:實現(xiàn)小數(shù)據(jù)量和海量數(shù)據(jù)的通用分頁顯示存儲過程。這是因為在將本存儲過程應(yīng)用于“辦公自動化”系統(tǒng)的實踐中時,筆者發(fā)現(xiàn)這第三種存儲過程在小數(shù)據(jù)量的情況下,有如下現(xiàn)象:

            1、分頁速度一般維持在1秒和3秒之間。

            2、在查詢最后一頁時,速度一般為5秒至8秒,哪怕分頁總數(shù)只有3頁或30萬頁。

              雖然在超大容量情況下,這個分頁的實現(xiàn)過程是很快的,但在分前幾頁時,這個1-3秒的速度比起第一種甚至沒有經(jīng)過優(yōu)化的分頁方法速度還要慢,借用戶的話說就是“還沒有ACCESS數(shù)據(jù)庫速度快”,這個認(rèn)識足以導(dǎo)致用戶放棄使用您開發(fā)的系統(tǒng)。
              筆者就此分析了一下,原來產(chǎn)生這種現(xiàn)象的癥結(jié)是如此的簡單,但又如此的重要:排序的字段不是聚集索引!
              本篇文章的題目是:“查詢優(yōu)化及分頁算法方案”。筆者只所以把“查詢優(yōu)化”和“分頁算法”這兩個聯(lián)系不是很大的論題放在一起,就是因為二者都需要一個非常重要的東西――聚集索引。
            在前面的討論中我們已經(jīng)提到了,聚集索引有兩個最大的優(yōu)勢:

            1、以最快的速度縮小查詢范圍。

            2、以最快的速度進行字段排序。

              第1條多用在查詢優(yōu)化時,而第2條多用在進行分頁時的數(shù)據(jù)排序。

              而聚集索引在每個表內(nèi)又只能建立一個,這使得聚集索引顯得更加的重要。聚集索引的挑選可以說是實現(xiàn)“查詢優(yōu)化”和“高效分頁”的最關(guān)鍵因素。
              但要既使聚集索引列既符合查詢列的需要,又符合排序列的需要,這通常是一個矛盾。筆者前面“索引”的討論中,將fariqi,即用戶發(fā)文日期作為了聚集索引的起始列,日期的精確度為“日”。這種作法的優(yōu)點,前面已經(jīng)提到了,在進行劃時間段的快速查詢中,比用ID主鍵列有很大的優(yōu)勢。
              但在分頁時,由于這個聚集索引列存在著重復(fù)記錄,所以無法使用max或min來最為分頁的參照物,進而無法實現(xiàn)更為高效的排序。而如果將ID主鍵列作為聚集索引,那么聚集索引除了用以排序之外,沒有任何用處,實際上是浪費了聚集索引這個寶貴的資源。
              為解決這個矛盾,筆者后來又添加了一個日期列,其默認(rèn)值為getdate()。用戶在寫入記錄時,這個列自動寫入當(dāng)時的時間,時間精確到毫秒。即使這樣,為了避免可能性很小的重合,還要在此列上創(chuàng)建UNIQUE約束。將此日期列作為聚集索引列。
              有了這個時間型聚集索引列之后,用戶就既可以用這個列查找用戶在插入數(shù)據(jù)時的某個時間段的查詢,又可以作為唯一列來實現(xiàn)max或min,成為分頁算法的參照物。
              經(jīng)過這樣的優(yōu)化,筆者發(fā)現(xiàn),無論是大數(shù)據(jù)量的情況下還是小數(shù)據(jù)量的情況下,分頁速度一般都是幾十毫秒,甚至0毫秒。而用日期段縮小范圍的查詢速度比原來也沒有任何遲鈍。聚集索引是如此的重要和珍貴,所以筆者總結(jié)了一下,一定要將聚集索引建立在:

            1、您最頻繁使用的、用以縮小查詢范圍的字段上;

            2、您最頻繁使用的、需要排序的字段上。

            結(jié)束語

              本篇文章匯集了筆者近段在使用數(shù)據(jù)庫方面的心得,是在做“辦公自動化”系統(tǒng)時實踐經(jīng)驗的積累。希望這篇文章不僅能夠給大家的工作帶來一定的幫助,也希望能讓大家能夠體會到分析問題的方法;最重要的是,希望這篇文章能夠拋磚引玉,掀起大家的學(xué)習(xí)和討論的興趣,以共同促進,共同為公安科技強警事業(yè)和金盾工程做出自己最大的努力。
              最后需要說明的是,在試驗中,我發(fā)現(xiàn)用戶在進行大數(shù)據(jù)量查詢的時候,對數(shù)據(jù)庫速度影響最大的不是內(nèi)存大小,而是CPU。在我的P4 2.4機器上試驗的時候,查看“資源管理器”,CPU經(jīng)常出現(xiàn)持續(xù)到100%的現(xiàn)象,而內(nèi)存用量卻并沒有改變或者說沒有大的改變。即使在我們的HP ML 350 G3服務(wù)器上試驗時,CPU峰值也能達(dá)到90%,一般持續(xù)在70%左右。
              本文的試驗數(shù)據(jù)都是來自我們的HP ML 350服務(wù)器。服務(wù)器配置:雙Inter Xeon 超線程 CPU 2.4G,內(nèi)存1G,操作系統(tǒng)Windows Server 2003 Enterprise Edition,數(shù)據(jù)庫SQL Server 2000 SP3

            文章引用:http://www.vckbase.com/document/viewdoc/?id=1310

            Posted on 2006-09-08 13:49 艾凡赫 閱讀(318) 評論(0)  編輯 收藏 引用 所屬分類: SqlServer
            久久精品国产亚洲一区二区| 久久天天躁狠狠躁夜夜2020老熟妇| 久久精品国产国产精品四凭| 国产三级精品久久| 97精品伊人久久大香线蕉| 91精品国产91久久久久久| 国内精品久久久久久久亚洲| 国产午夜精品久久久久九九电影| 久久国产精品二国产精品| 久久久黄色大片| 久久久久国产精品| 久久久无码精品亚洲日韩京东传媒 | 99久久人妻无码精品系列蜜桃| 国产精品无码久久综合网| 免费精品久久天干天干| 国产成人久久精品二区三区| 久久精品中文字幕一区| 国产香蕉97碰碰久久人人| 久久人妻少妇嫩草AV无码专区| 性做久久久久久免费观看| 国产精品欧美久久久天天影视| 香蕉久久永久视频| 久久精品夜色噜噜亚洲A∨| 久久久久久国产精品免费无码| 无码人妻少妇久久中文字幕| 久久噜噜电影你懂的| 久久超乳爆乳中文字幕| 东方aⅴ免费观看久久av| 色婷婷噜噜久久国产精品12p | 精品久久无码中文字幕| 久久福利资源国产精品999| 久久久久国产视频电影| 国内精品久久久久久久coent| 久久久久久综合一区中文字幕 | 久久天天躁狠狠躁夜夜2020一| 国产99久久久久久免费看| 热久久这里只有精品| 久久久综合九色合综国产| 亚洲乱亚洲乱淫久久| 久久精品国产精品亜洲毛片| 99久久亚洲综合精品成人|