西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → 如何在 SQL 數(shù)據(jù)庫優(yōu)化 索引,SQL索引優(yōu)化-技巧

如何在 SQL 數(shù)據(jù)庫優(yōu)化 索引,SQL索引優(yōu)化-技巧

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時(shí)間:2010/12/1 20:02:51字體大。A-A+

作者:綠色軟件編輯點(diǎn)擊:2743次評論:0次標(biāo)簽: sql sqlserver

  • 類型:電子教程大。8.5M語言:中文 評分:8.3
  • 標(biāo)簽:
立即下載
8 頁 聚集索引的重要性和如何選擇聚集索引


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

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

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

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

  雖然在超大容量情況下,這個(gè)分頁的實(shí)現(xiàn)過程是很快的,但在分前幾頁時(shí),這個(gè)1-3秒的速度比起第一種甚至沒有經(jīng)過優(yōu)化的分頁方法速度還要慢,借用戶的話說就是“還沒有ACCESS數(shù)據(jù)庫速度快”,這個(gè)認(rèn)識足以導(dǎo)致用戶放棄使用您開發(fā)的系統(tǒng)。

  筆者就此分析了一下,原來產(chǎn)生這種現(xiàn)象的癥結(jié)是如此的簡單,但又如此的重要:排序的字段不是聚集索引!

  本篇文章的題目是:“查詢優(yōu)化及分頁算法方案”。筆者只所以把“查詢優(yōu)化”和“分頁算法”這兩個(gè)聯(lián)系不是很大的論題放在一起,就是因?yàn)槎叨夹枰粋(gè)非常重要的東西――聚集索引。

  在前面的討論中我們已經(jīng)提到了,聚集索引有兩個(gè)最大的優(yōu)勢:

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

  2、以最快的速度進(jìn)行字段排序。

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

  而聚集索引在每個(gè)表內(nèi)又只能建立一個(gè),這使得聚集索引顯得更加的重要。聚集索引的挑選可以說是實(shí)現(xiàn)“查詢優(yōu)化”和“高效分頁”的最關(guān)鍵因素。

  但要既使聚集索引列既符合查詢列的需要,又符合排序列的需要,這通常是一個(gè)矛盾。

  筆者前面“索引”的討論中,將fariqi,即用戶發(fā)文日期作為了聚集索引的起始列,日期的精確度為“日”。這種作法的優(yōu)點(diǎn),前面已經(jīng)提到了,在進(jìn)行劃時(shí)間段的快速查詢中,比用ID主鍵列有很大的優(yōu)勢。

  但在分頁時(shí),由于這個(gè)聚集索引列存在著重復(fù)記錄,所以無法使用max或min來最為分頁的參照物,進(jìn)而無法實(shí)現(xiàn)更為高效的排序。而如果將ID主鍵列作為聚集索引,那么聚集索引除了用以排序之外,沒有任何用處,實(shí)際上是浪費(fèi)了聚集索引這個(gè)寶貴的資源。

  為解決這個(gè)矛盾,筆者后來又添加了一個(gè)日期列,其默認(rèn)值為getdate()。用戶在寫入記錄時(shí),這個(gè)列自動寫入當(dāng)時(shí)的時(shí)間,時(shí)間精確到毫秒。即使這樣,為了避免可能性很小的重合,還要在此列上創(chuàng)建UNIQUE約束。將此日期列作為聚集索引列。

  有了這個(gè)時(shí)間型聚集索引列之后,用戶就既可以用這個(gè)列查找用戶在插入數(shù)據(jù)時(shí)的某個(gè)時(shí)間段的查詢,又可以作為唯一列來實(shí)現(xiàn)max或min,成為分頁算法的參照物。

  經(jīng)過這樣的優(yōu)化,筆者發(fā)現(xiàn),無論是大數(shù)據(jù)量的情況下還是小數(shù)據(jù)量的情況下,分頁速度一般都是幾十毫秒,甚至0毫秒。而用日期段縮小范圍的查詢速度比原來也沒有任何遲鈍。

  聚集索引是如此的重要和珍貴,所以筆者總結(jié)了一下,一定要將聚集索引建立在:

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

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

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)