資源描述:
《使用sql server 2000索引視圖提高性能--》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、使用SQLServer2000索引視圖提高性能>> 本文介紹SQLServer2000企業(yè)版的新功能-索引視圖。講解索引視圖并討論一些提高性能的具體方案?! ∈裁词撬饕晥D? 許多年來,Microsoft®SQLServer™一直都提供創(chuàng)建虛擬表(稱為視圖)的功能。在過去,這些視圖主要有兩種用途: 提供安全機(jī)制,將用戶限制在一個(gè)或多個(gè)基表中的數(shù)據(jù)的某個(gè)子集。 提供一種機(jī)制,允許開發(fā)人員定制用戶如何才能以邏輯方式查看存儲(chǔ)在基表中的數(shù)據(jù)?! QLServer2000已經(jīng)擴(kuò)展了SQLServer視圖的功能,以提高系統(tǒng)性能。它可以在
2、一個(gè)視圖上創(chuàng)建唯一的群集索引和非群集索引,可以改進(jìn)最復(fù)雜查詢的數(shù)據(jù)訪問性能。在SQLServer2000中,擁有唯一群集索引的視圖被稱為索引視圖?! ∽⒁猓核饕晥D只是SQLServer2000企業(yè)版和SQLServer2000開發(fā)人員版的一個(gè)功能?! 臄?shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的觀點(diǎn)來看,視圖是數(shù)據(jù)(元數(shù)據(jù))的說明。創(chuàng)建典型視圖時(shí),通過SELECT語句(定義一個(gè)顯示為虛擬表的結(jié)果集)來定義元數(shù)據(jù)。當(dāng)其它查詢的FROM子句中引用了某個(gè)視圖時(shí),將從系統(tǒng)目錄中檢索該元數(shù)據(jù),并對(duì)其進(jìn)行擴(kuò)展以代替該視圖的引用。在視圖擴(kuò)展之后,查詢優(yōu)化器會(huì)為正在執(zhí)行的查詢編譯單
3、個(gè)執(zhí)行計(jì)劃?! ∪绻欠撬饕晥D,視圖在運(yùn)行時(shí)將被實(shí)體化。任何計(jì)算(如聯(lián)接或聚合)都在為每個(gè)引用該視圖的查詢執(zhí)行查詢期間進(jìn)行。(視圖并不總需要被完全實(shí)體化。查詢可以包含其它一些謂詞、聯(lián)接或聚合,以應(yīng)用于該視圖所引用的表和視圖。)在視圖上創(chuàng)建了唯一的群集索引之后,視圖的結(jié)果集會(huì)立即被實(shí)體化并持續(xù)保存在數(shù)據(jù)庫(kù)的物理存儲(chǔ)空間中,以便節(jié)省這種操作所占用的大量資源?! ≡趫?zhí)行查詢時(shí),有兩種方法可以使用索引視圖。查詢可直接引用索引視圖,更重要的是,如果查詢優(yōu)化器確定視圖能夠替換為查詢的部分或全部,而且這是低成本的查詢計(jì)劃,則可以選擇索引視圖。第二種情況是使用索引視圖
4、代替基礎(chǔ)表及其普通索引。此時(shí),不需要在查詢中引用視圖,查詢優(yōu)化器即可在執(zhí)行查詢期間使用該視圖。這樣,現(xiàn)有的應(yīng)用程序無需更改即可從新建的索引視圖中獲益?! ⊥ㄟ^索引視圖提高的性能 使用索引來提高查詢性能并不是什么新觀念,不過,索引視圖還具有使用標(biāo)準(zhǔn)索引不能獲得的其它性能優(yōu)點(diǎn)。索引視圖能夠在以下方面提高查詢性能: 能夠預(yù)先計(jì)算聚合并將其存儲(chǔ)在索引中,從而最大限度地減少在執(zhí)行查詢期間進(jìn)行成本很高的計(jì)算?! ∧軌蝾A(yù)先聯(lián)接表并存儲(chǔ)生成的數(shù)據(jù)集。 能夠存儲(chǔ)聯(lián)接或聚合的組合?! ∠聢D說明了查詢優(yōu)化器使用索引視圖時(shí)一般能夠提高多少性能。提供的查詢復(fù)雜程度各不相同(
5、例如,聚合計(jì)算的數(shù)量、所用表的數(shù)量或謂詞數(shù)),并包括來自實(shí)際生產(chǎn)環(huán)境的數(shù)百萬行的大表?! D1.當(dāng)查詢優(yōu)化器使用索引視圖時(shí)一般能夠提高多少性能 使用視圖的輔助索引 視圖的輔助性非群集索引可以提高其它查詢性能。與表的輔助索引類似,視圖的輔助索引也可以提供更多選項(xiàng),以便查詢優(yōu)化器在編譯過程中從中進(jìn)行選擇。例如,如果查詢包括群集索引未涉及的列,優(yōu)化器可以在計(jì)劃中選擇一個(gè)或多個(gè)輔助索引,從而避免對(duì)索引視圖或基表進(jìn)行費(fèi)時(shí)的全局掃描?! ∮捎谒饕枰粩嗑S護(hù),所以為架構(gòu)添加索引會(huì)增加數(shù)據(jù)庫(kù)的額外開銷。因此應(yīng)該認(rèn)真考慮,找到索引和維護(hù)額外開銷之間的平衡點(diǎn)?! ?/p>
6、使用索引視圖的好處 實(shí)現(xiàn)索引視圖之前,請(qǐng)先分析數(shù)據(jù)庫(kù)的工作量。運(yùn)用自己對(duì)查詢以及各種工具(例如SQL分析器)的知識(shí)來鑒別使用索引視圖可以獲益的查詢。如果經(jīng)常進(jìn)行聚合和聯(lián)接,最好使用索引視圖?! 〔⒎撬胁樵兌紩?huì)從索引視圖中獲益。與普通索引類似,如果未使用索引視圖,就沒有好處可言。在此情況下,不但不能提高性能,還會(huì)加大磁盤空間的占用、增加維護(hù)和優(yōu)化的成本。但是,如果使用了索引視圖,它們可以(成數(shù)量級(jí)地)明顯地提高數(shù)據(jù)訪問的性能。這是因?yàn)椴樵儍?yōu)化器使用存儲(chǔ)在索引視圖中的預(yù)先計(jì)算的結(jié)果,從而大大降低了執(zhí)行查詢的成本。 查詢優(yōu)化器只在查詢的成本比較大時(shí)才考慮
7、使用索引視圖。這樣可以避免在查詢優(yōu)化成本超出因使用索引視圖而節(jié)省的成本時(shí),試圖使用各種索引視圖。當(dāng)查詢成本低于1時(shí),幾乎不使用索引視圖?! ∈褂盟饕晥D可以受益的應(yīng)用包括: ◆決定支持工作量 ◆數(shù)據(jù)集市 ◆聯(lián)機(jī)分析處理(OLAP)庫(kù)和源 ◆數(shù)據(jù)挖掘工作量 從查詢的類型和模式的角度來看,受益的應(yīng)用可被歸納為包含以下內(nèi)容的應(yīng)用: ◆大表的聯(lián)接和聚合 ◆查詢的重復(fù)模式 ◆重復(fù)聚合相同或重疊的列集 ◆針對(duì)相同關(guān)鍵字重復(fù)聯(lián)接相同的表 ◆上述的組合 相反,包含許多寫入的聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)或更新頻繁的數(shù)據(jù)庫(kù),可能會(huì)因?yàn)橐瑫r(shí)更新視圖和根
8、本基表而使維護(hù)成本增加,所以不能利用索引視圖?! 〔樵儍?yōu)化器如何使用索引視圖