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