Oracle課程設(shè)計(jì)B樹(shù)_第1頁(yè)
Oracle課程設(shè)計(jì)B樹(shù)_第2頁(yè)
Oracle課程設(shè)計(jì)B樹(shù)_第3頁(yè)
Oracle課程設(shè)計(jì)B樹(shù)_第4頁(yè)
Oracle課程設(shè)計(jì)B樹(shù)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、學(xué) 號(hào): 課 程 設(shè) 計(jì)題 目B*樹(shù)索引學(xué) 院計(jì)算機(jī)科學(xué)與信息工程學(xué)院專 業(yè)金融信息化服務(wù)外包班 級(jí)學(xué)生姓名指導(dǎo)教師2015年12月27日重慶工商大學(xué)課程設(shè)計(jì)成績(jī)?cè)u(píng)定表學(xué)院:計(jì)信學(xué)院 班級(jí): 學(xué)生姓名: 學(xué)號(hào):項(xiàng)目分值優(yōu)秀(100>x90)良好(90>x80)中等(80>x70)及格(70>x60)不及格(x<60)評(píng)分參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)參考標(biāo)準(zhǔn)學(xué)習(xí)態(tài)度15學(xué)習(xí)態(tài)度認(rèn)真,科學(xué)作風(fēng)嚴(yán)謹(jǐn),嚴(yán)格保證設(shè)計(jì)時(shí)間并按任務(wù)書中規(guī)定的進(jìn)度開(kāi)展各項(xiàng)工作學(xué)習(xí)態(tài)度比較認(rèn)真,科學(xué)作風(fēng)良好,能按期圓滿完成任務(wù)書規(guī)定的任務(wù)學(xué)習(xí)態(tài)度尚好,遵守組織紀(jì)律,基本保證設(shè)計(jì)時(shí)間,按期完成各

2、項(xiàng)工作學(xué)習(xí)態(tài)度尚可,能遵守組織紀(jì)律,能按期完成任務(wù)學(xué)習(xí)馬虎,紀(jì)律渙散,工作作風(fēng)不嚴(yán)謹(jǐn),不能保證設(shè)計(jì)時(shí)間和進(jìn)度技術(shù)水平與實(shí)際能力25設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)準(zhǔn)確,有很強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,文獻(xiàn)查閱能力強(qiáng)、引用合理、調(diào)查調(diào)研非常合理、可信設(shè)計(jì)合理、理論分析與計(jì)算正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有較強(qiáng)的實(shí)際動(dòng)手能力、經(jīng)濟(jì)分析能力和計(jì)算機(jī)應(yīng)用能力,文獻(xiàn)引用、調(diào)查調(diào)研比較合理、可信設(shè)計(jì)合理,理論分析與計(jì)算基本正確,實(shí)驗(yàn)數(shù)據(jù)比較準(zhǔn)確,有一定的實(shí)際動(dòng)手能力,主要文獻(xiàn)引用、調(diào)查調(diào)研比較可信設(shè)計(jì)基本合理,理論分析與計(jì)算無(wú)大錯(cuò),實(shí)驗(yàn)數(shù)據(jù)無(wú)大錯(cuò)設(shè)計(jì)不合理,理論分析與計(jì)算有原則錯(cuò)誤,實(shí)

3、驗(yàn)數(shù)據(jù)不可靠,實(shí)際動(dòng)手能力差,文獻(xiàn)引用、調(diào)查調(diào)研有較大的問(wèn)題創(chuàng)新10有重大改進(jìn)或獨(dú)特見(jiàn)解,有一定實(shí)用價(jià)值有較大改進(jìn)或新穎的見(jiàn)解,實(shí)用性尚可有一定改進(jìn)或新的見(jiàn)解有一定見(jiàn)解觀念陳舊論文(計(jì)算書、圖紙)撰寫質(zhì)量50結(jié)構(gòu)嚴(yán)謹(jǐn),邏輯性強(qiáng),層次清晰,語(yǔ)言準(zhǔn)確,文字流暢,完全符合規(guī)范化要求,書寫工整或用計(jì)算機(jī)打印成文;圖紙非常工整、清晰結(jié)構(gòu)合理,符合邏輯,文章層次分明,語(yǔ)言準(zhǔn)確,文字流暢,符合規(guī)范化要求,書寫工整或用計(jì)算機(jī)打印成文;圖紙工整、清晰結(jié)構(gòu)合理,層次較為分明,文理通順,基本達(dá)到規(guī)范化要求,書寫比較工整;圖紙比較工整、清晰結(jié)構(gòu)基本合理,邏輯基本清楚,文字尚通順,勉強(qiáng)達(dá)到規(guī)范化要求;圖紙比較工整內(nèi)容空

4、泛,結(jié)構(gòu)混亂,文字表達(dá)不清,錯(cuò)別字較多,達(dá)不到規(guī)范化要求;圖紙不工整或不清晰指導(dǎo)教師評(píng)定成績(jī):指導(dǎo)教師簽名: 年 月 日第 17 頁(yè) 共 17 頁(yè)課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 專業(yè)班級(jí): 指導(dǎo)教師: 工作單位: 題 目: B*樹(shù)索引已知技術(shù)參數(shù)和設(shè)計(jì)要求:a) 時(shí)間要求為14周18周。b) 開(kāi)發(fā)工具不限(oracle/sqlplus)。c) 開(kāi)發(fā)平臺(tái)不限(Linux)。d) 集成開(kāi)發(fā)環(huán)境不限。e) 所用數(shù)據(jù)庫(kù)不限(Oracle 10g)。f) 說(shuō)明文檔要求符合學(xué)校課程設(shè)計(jì)文檔規(guī)范。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)B*樹(shù)索引。(1) 什么是B*樹(shù)(2

5、) B*索引的組織結(jié)構(gòu)(3) 索引鍵壓縮(作用及結(jié)構(gòu))(4) 反向鍵索引(作用及結(jié)構(gòu))(5) 降序索引(作用及結(jié)構(gòu))時(shí)間安排:1、研究分析什么是B*樹(shù),和同學(xué)討論聯(lián)系實(shí)際,歷時(shí)2天。2、研究分析B*索引的組織結(jié)構(gòu),歷時(shí)2天。3、研究分析索引鍵壓縮,反向鍵索引,降序索引,歷時(shí)4天。4、編寫相關(guān)文檔,歷時(shí)2天。5、Oracle大型數(shù)據(jù)庫(kù)課程設(shè)計(jì)文檔的最后檢查與修訂,歷時(shí)1天指導(dǎo)教師簽名: 年 月 日目錄1.什么是B*樹(shù)52.B*索引的組織結(jié)構(gòu)63.索引鍵壓縮(作用及結(jié)構(gòu))74.反向鍵索引(作用及結(jié)構(gòu))8(1).反向索引應(yīng)用場(chǎng)合9(2).使用反向索引的優(yōu)點(diǎn).9(3).使用反向索引的缺點(diǎn).9(4).通

6、過(guò)一個(gè)實(shí)驗(yàn)簡(jiǎn)單演示一下反向索引的創(chuàng)建及修改145.降序索引(作用及結(jié)構(gòu))146.總結(jié)157.參考資料151.什么是B*樹(shù)B*樹(shù)是B+樹(shù)的變體,在B+樹(shù)的非根和非葉子結(jié)點(diǎn)再增加指向兄弟的指針;B*樹(shù)定義了非葉子結(jié)點(diǎn)關(guān)鍵字個(gè)數(shù)至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹(shù)的1/2)。B+樹(shù)的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí),分配一個(gè)新的結(jié)點(diǎn),并將原結(jié)點(diǎn)中1/2的數(shù)據(jù)復(fù)制到新結(jié)點(diǎn),最后在父結(jié)點(diǎn)中增加新結(jié)點(diǎn)的指針;B+樹(shù)的分裂只影響原結(jié)點(diǎn)和父結(jié)點(diǎn),而不會(huì)影響兄弟結(jié)點(diǎn),所以它不需要指向兄弟的指針。B*樹(shù)的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí),如果它的下一個(gè)兄弟結(jié)點(diǎn)未滿,那么將一部 分?jǐn)?shù)據(jù)移到兄弟結(jié)點(diǎn)中,再在原結(jié)點(diǎn)插入關(guān)

7、鍵字,最后修改父結(jié)點(diǎn)中兄弟結(jié)點(diǎn)的關(guān)鍵字(因?yàn)樾值芙Y(jié)點(diǎn)的關(guān)鍵字范圍改變了)。如果兄弟也滿了,則在原結(jié)點(diǎn)與兄弟結(jié)點(diǎn)之間增加新結(jié)點(diǎn),并各復(fù)制1/3的數(shù)據(jù)到新結(jié)點(diǎn),最后在父結(jié)點(diǎn)增加新結(jié)點(diǎn)的指針,所以,B*樹(shù)分配新結(jié)點(diǎn)的概率比B+樹(shù)要低,空間使用率更高。 B*樹(shù)索引就是我們說(shuō)的“傳統(tǒng)”索引,這是數(shù)據(jù)庫(kù)中最常用的一類索引結(jié)構(gòu)。其實(shí)現(xiàn)與二叉查找樹(shù)類似,目標(biāo)是減少oracle查找數(shù)據(jù)的時(shí)間。如果在一個(gè)數(shù)字列上有一個(gè)索引,那么理論上結(jié)構(gòu)應(yīng)該是這樣的(圖1):圖1 具體B*結(jié)構(gòu)示意圖  這個(gè)樹(shù)最底層是葉子節(jié)點(diǎn),包含索引鍵以及一個(gè)rowid(指向索引行)。葉子節(jié)點(diǎn)上面的稱為分支塊,用于在結(jié)構(gòu)中實(shí)

8、現(xiàn)導(dǎo)航。例如:想在索引中找到值42,從樹(shù)頂開(kāi)始查找進(jìn)入左分支,查找這個(gè)塊,發(fā)現(xiàn)需要找的數(shù)據(jù)在“42.50”的葉子節(jié)點(diǎn)中。另外,葉子節(jié)點(diǎn)之間是雙向鏈表結(jié)構(gòu)。也就是查找區(qū)間數(shù)據(jù)很容易,比如這樣的條件:where x between 20 and 300。oracle只要?jiǎng)傞_(kāi)始找到大于或等于20的記錄所在的葉子節(jié)點(diǎn),接著往下掃描,找到大于或者等于300的塊。這期間可能會(huì)跨葉子節(jié)點(diǎn)掃描,由于葉子節(jié)點(diǎn)之間是雙向鏈表,故很容易實(shí)現(xiàn)跨葉子節(jié)點(diǎn)掃描。  B*樹(shù)有一個(gè)特點(diǎn):所有的葉子節(jié)點(diǎn)都在同一層,也就是無(wú)論你查找哪一條數(shù)據(jù),需要執(zhí)行的I/O數(shù)據(jù)是一樣的。一般的B*樹(shù)都是2或者3層。無(wú)論這個(gè)表有多少行

9、數(shù)據(jù),這樣查找一條數(shù)據(jù)只需要2,3個(gè)I/O操作。2.B*索引的組織結(jié)構(gòu) 一般的B*樹(shù)結(jié)構(gòu)如圖 2所示。圖 2 B*結(jié)構(gòu)示意圖最底層的數(shù)據(jù)塊被稱為葉子結(jié)點(diǎn),葉子結(jié)點(diǎn)中包含了索引鍵值和其所對(duì)應(yīng)的 ROWID 。其它的數(shù)據(jù)塊被稱為分支塊,可用于定位相應(yīng)的葉子結(jié)點(diǎn)。同時(shí)葉子結(jié)點(diǎn)之間也存在一個(gè)雙 向鏈表,當(dāng)對(duì)某個(gè)索引進(jìn)行范圍掃描時(shí),可通過(guò)葉子結(jié)點(diǎn)之間的雙向鏈表來(lái)進(jìn)行檢索而不用通過(guò)分支結(jié)點(diǎn)。每個(gè)索引最少有一個(gè)葉子結(jié)點(diǎn),一個(gè)葉子結(jié)點(diǎn)中可包含多行索引數(shù)據(jù)。B*樹(shù)索引中所有的葉子結(jié)點(diǎn)都應(yīng)在同一層中,此層的高度也即稱為這個(gè)索引的高度,因此可以說(shuō)索引是高度平衡的。B*樹(shù)索引最大的層次為24層,一個(gè)索引中最

10、多只能包含32個(gè)字段列。每個(gè)鍵的長(zhǎng)度根據(jù)不同版本的數(shù)據(jù)塊大小的不同而不同。分支塊結(jié)點(diǎn)存儲(chǔ)的是指向其下層結(jié)點(diǎn)的指針,每一個(gè)索引都有一個(gè)根結(jié)點(diǎn),根結(jié)點(diǎn)所在的數(shù)據(jù)塊在索引段中緊隨段頭信息所在的數(shù)據(jù)塊。整個(gè)索引的層次被稱為索引的高度 ,可通過(guò)數(shù)據(jù)庫(kù)中視圖 index_ stat 中的字段 height 查出,分支結(jié)點(diǎn)的層次被稱為 blevel,可在數(shù)據(jù)字典 dba_indexes 中的字段 blevel 查出,需對(duì)索引進(jìn)行分析才可計(jì)算出索引的高度和blevel 的值,即analyze index index _ name validate structure。索引的高度是由索引的分支結(jié)點(diǎn)的個(gè)數(shù)決定的,

11、而索引分支結(jié)點(diǎn)的個(gè)數(shù)又是由索引鍵值的長(zhǎng)度和索引葉子結(jié)點(diǎn)的個(gè)數(shù)決定的。Oracle 數(shù)據(jù)庫(kù)中的最小邏輯單元是數(shù)據(jù)庫(kù)數(shù)據(jù)塊,其大小由數(shù)據(jù)庫(kù)初始化參數(shù) DB_BLOCK_SIZE 所決定。所有的索引數(shù)據(jù)和表數(shù)據(jù)都是以數(shù)據(jù)塊為單位存放的,同時(shí)每個(gè)索引數(shù)據(jù)塊會(huì)存放相應(yīng)的頭信息。3.索引鍵壓縮(作用及結(jié)構(gòu))信息檢索系統(tǒng)中的兩個(gè)主要數(shù)據(jù)結(jié)構(gòu):詞典及倒排索引。下面將介紹對(duì)這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的各種壓縮技術(shù),這些技術(shù)對(duì)于構(gòu)建高效的 IR 系統(tǒng)非常關(guān)鍵。進(jìn)行壓縮的一個(gè)優(yōu)點(diǎn)顯而易見(jiàn):它能夠節(jié)省磁盤空間。要達(dá)到 14 的壓縮比是非常容易的,也就是說(shuō)可以降低 75%的索引存儲(chǔ)開(kāi)銷。索引壓縮還有兩個(gè)隱含的優(yōu)點(diǎn)。第一是能增加高速

12、緩存(caching)技術(shù)的利用率。在搜索系統(tǒng)中,詞典中某些條目及其索引往往比其他條目及其索引的使用更頻繁。例如:如果將一個(gè)頻繁使用的查詢?cè)~項(xiàng)t的倒排記錄表放到高速緩存中,那么對(duì)僅由t構(gòu)成的查詢進(jìn)行應(yīng)答所需要的計(jì)算完全可以在內(nèi)存中完成。如果采用壓縮技術(shù),那么高速緩存中就可以放更多的信息。當(dāng)查詢?cè)~項(xiàng)t的信息放在高速緩存時(shí),處理查詢t便不再需要進(jìn)行磁盤操作,而只需將其倒排記錄表在內(nèi)存中解壓縮即可。因此,我們能充分減少IR系統(tǒng)的應(yīng)答時(shí)間。由于內(nèi)存比磁盤更貴,所以,相對(duì)于磁盤空間的減少,采用高速緩存技術(shù)帶來(lái)的速度提升是采用壓縮技術(shù)的更主要的原因。 第二個(gè)隱含的優(yōu)點(diǎn)是,壓縮能夠加快數(shù)據(jù)從磁盤到

13、內(nèi)存的傳輸速度。高效的解壓縮算法在現(xiàn)代硬件上運(yùn)行相當(dāng)快,這樣將壓縮的數(shù)據(jù)塊傳輸?shù)絻?nèi)存并解壓所需要的總時(shí)間往往會(huì)比將未壓縮的數(shù)據(jù)塊傳輸?shù)絻?nèi)存要快。舉例來(lái)說(shuō),即使會(huì)增加在內(nèi)存進(jìn)行解壓縮的開(kāi)銷,我們也可以 通過(guò)加載一個(gè)小很多的壓縮倒排記錄表來(lái)減少 I/O 時(shí)間。因此,在大部分情況下,使用壓縮倒排記錄表的檢索系統(tǒng)會(huì)比沒(méi)用壓縮的系統(tǒng)的運(yùn)行速度要快。 如果壓縮的主要目的是為了節(jié)省磁盤空間,那么壓縮算法的速度就不用特別考慮。但是, 如果要提高高速緩存利用率和磁盤到內(nèi)存的傳輸率,則解壓縮的速度必須要快。 【將詞典看成單一字符串的壓縮方法】采用定長(zhǎng)方法來(lái)存儲(chǔ)詞項(xiàng)存在著明顯的空間浪費(fèi)。一種解決

14、上述缺陷的方法是,將所有的詞項(xiàng)存成一個(gè)長(zhǎng)字符串,并給每個(gè)詞項(xiàng)增加一個(gè)定位指針,它在指向下一詞項(xiàng)的指針同時(shí)也標(biāo)識(shí)著 當(dāng)前詞項(xiàng)的結(jié)束。(就是目前構(gòu)架中的var_data)實(shí)際上,按照詞典順序排序的連續(xù)詞項(xiàng)之間往往具有公共前綴。因此,可以采用一種稱為前端編碼(front coding)的技術(shù)。 公共前綴被識(shí)別出來(lái)之后,后續(xù)的詞項(xiàng)中便可以使用一個(gè)特殊的字符來(lái)表示這段前綴。假如一個(gè)表中,需要三列才能確認(rèn)一行。那么我們?cè)谶@個(gè)表示建立索引需要建立在這三列上。那么索引塊的結(jié)構(gòu)有可能是這樣的:                

15、0; 圖3索引塊的結(jié)構(gòu)   我們會(huì)發(fā)現(xiàn),第一列和第二列有很多值是重復(fù)的。其實(shí)這個(gè)時(shí)候可以進(jìn)行壓縮,對(duì)于重復(fù)的值,只保存一份。比如:Sql代碼 : (1)<span style="font-size: x-small;">drop index t_idx;  (2)create index t_idx on  (3)t(owner,object_type,object_name)  (4)compress&

16、#160;&2;</span>    compress&2表示壓縮兩列,這樣能節(jié)省空間,但是會(huì)增加尋找的難度。也就是說(shuō),如果現(xiàn)在已經(jīng)占用了大量的cpu時(shí)間,那么創(chuàng)建索引以壓縮 的方式,會(huì)使情況更糟糕。如果目前只是I/O操作比較多,那么壓縮索引能加快處理速度,因?yàn)閴嚎s之后的索引空間更少,那么塊緩沖區(qū)應(yīng)該能存放更多的索引塊,塊的命中率會(huì)提高。4.反向鍵索引(作用及結(jié)構(gòu))我們知道Oracle會(huì)自動(dòng)為表的主鍵列建立索引,這個(gè)默認(rèn)的索引是普通的B-Tree索引。對(duì)于主鍵值是按順序(遞增或遞減)加入的情況,默認(rèn)的B-Tree索引并不理想。

17、這是因?yàn)槿绻饕械闹稻哂袊?yán)格順序時(shí),隨著數(shù)據(jù)行的插入,索引樹(shù)的層級(jí)增長(zhǎng)很快。搜索索引發(fā)生的I/O讀寫次數(shù)和索引樹(shù)的層級(jí)數(shù)成正比,也就是說(shuō),一棵具有5個(gè)層級(jí)的B -Tree索引,在最終讀取到索引數(shù)據(jù)時(shí)最多可能發(fā)生多達(dá)5次I/O操作。因而,減少索引的層級(jí)數(shù)是索引性能調(diào)整的一個(gè)重要方法。如果索引列的數(shù)據(jù)以嚴(yán)格的有序的方式插入,那么B-Tree索引樹(shù)將變成一棵不對(duì)稱的"歪樹(shù)",如圖 4所示:圖4不對(duì)稱的“歪樹(shù)“而如果索引列的數(shù)據(jù)以隨機(jī)值的方式插入,我們將得到一棵趨向?qū)ΨQ的索引樹(shù),如圖 5所示:圖5對(duì)稱的索引樹(shù)比較圖4和圖5,在圖4中搜索到A塊需要進(jìn)行5次I/O操作,而圖 5僅需要

18、3次I/O操作。 既然索引列數(shù)據(jù)從序列中獲取,其有序性無(wú)法規(guī)避,但在建立索引時(shí),Oracle允許對(duì)索引列的值進(jìn)行反向,即預(yù)先對(duì)列值進(jìn)行比特位的反向,如 1000,10001,10011,10111,1100經(jīng)過(guò)反向后的值將是0001,1001,1101,0011。顯然經(jīng)過(guò)位反向處理的有序數(shù)據(jù)變得比較隨機(jī)了,這樣所得到的索引樹(shù)就比較對(duì)稱,從而提高表的查詢性能。 但反向鍵索引也有它局限性:如果在WHERE語(yǔ)句中,需要對(duì)索引列的值進(jìn)行范圍性的搜索,如BETWEEN、<、>等,其反向鍵索引無(wú)法使用,此時(shí),Oracle將執(zhí)行全表掃描;只有對(duì)反向鍵索引列進(jìn)行 <>和 = 的比較操作

19、時(shí),其反向鍵索引才會(huì)得到使用。(1).反向索引應(yīng)用場(chǎng)合1)發(fā)現(xiàn)索引葉塊成為熱點(diǎn)塊時(shí)使用 通常,使用數(shù)據(jù)時(shí)(常見(jiàn)于批量插入操作)都比較集中在一個(gè)連續(xù)的數(shù)據(jù)范圍內(nèi),那么在使用正常的索引時(shí)就很容易發(fā)生索引葉子塊過(guò)熱的現(xiàn)象,嚴(yán)重時(shí)將會(huì)導(dǎo)致系統(tǒng)性能下降。2)在RAC環(huán)境中使用 當(dāng)RAC環(huán)境中幾個(gè)節(jié)點(diǎn)訪問(wèn)數(shù)據(jù)的特點(diǎn)是集中和密集,索引熱點(diǎn)塊發(fā)生的幾率就會(huì)很高。如果系統(tǒng)對(duì)范圍檢索要求不是很高的情況下可以考慮使用反向索引技術(shù)來(lái)提高系統(tǒng)的性能。因此該技術(shù)多見(jiàn)于RAC環(huán)境,它可以顯著的降低索引塊的爭(zhēng)用。(2).使用反向索引的優(yōu)點(diǎn) 最大的優(yōu)點(diǎn)莫過(guò)于降低索引葉子塊的爭(zhēng)用,減少熱點(diǎn)塊,提高系統(tǒng)性能。(3).使用反向索引的

20、缺點(diǎn) 由于反向索引結(jié)構(gòu)自身的特點(diǎn),如果系統(tǒng)中經(jīng)常使用范圍掃描進(jìn)行讀取數(shù)據(jù)的話(例如在where子句中使用“between and”語(yǔ)句或比較運(yùn)算符“>”“<”等),那么反向索引將不適用,因?yàn)榇藭r(shí)會(huì)出現(xiàn)大量的全表掃描的現(xiàn)象,反而會(huì)降低系統(tǒng)的性能。有時(shí)候可以通過(guò)改寫sql語(yǔ)句來(lái)避免使用范圍掃描,例如where id between 12345 and 12347,可以改寫為where id in(12345,12346,12347),CBO會(huì)把這樣的sql查詢轉(zhuǎn)換為where id=12345 or id=12346 or id=12347,這對(duì)反向索引也是有效的。(4).通過(guò)一個(gè)小實(shí)

21、驗(yàn)簡(jiǎn)單演示一下反向索引的創(chuàng)建及修改1. SQL> select count(*) from t1; 2.   COUNT(*)  3. -  4.          0  5. SQL> select count(*) from t2;  6.   COUNT(*)  

22、;7. -  8.          0  9. SQL> select count(*) from t3;  10.   COUNT(*)  11. -  12.    2000000  13. SQL> select INDEX_NAME,INDEX_TYPE,T

23、ABLE_NAME from user_indexes;  14. INDEX_NAME                     INDEX_TYPE                

24、0; TABLE_NAME  15. - - -  16. PK_T2                          NORMAL/REV          

25、0;       T2  17. PK_T1                          NORMAL            

26、;          T1  表t1是主鍵是正常的主鍵,表t2的主鍵是反向主鍵。現(xiàn)在我把表t3的數(shù)據(jù)分別插入到表t1和表t21. SQL> set timing on;  2. SQL> set autotrace on;  3. SQL> insert /* +append */ into t1&#

27、160;select * from t3;  4. 已創(chuàng)建2000000行。  5. 已用時(shí)間:  00: 01: 42.83  6. 執(zhí)行計(jì)劃  7. -  8. Plan hash value: 4161002650  9. -  10. | Id  | Operation   

28、60;            | Name | Rows  | Bytes | Cost (%CPU)| Time     |  11. -  12. |   0 | INSERT STATEMENT  

29、60;      |      |  2316K|   485M| 19014   (1)| 00:03:49 |  13. |   1 |  LOAD TABLE CONVENTIONAL | T1   | 

30、      |       |            |          |  14. |   2 |   TABLE ACCESS FU

31、LL      | T3   |  2316K|   485M| 19014   (1)| 00:03:49 |  15. -  16. Note  17. -  18.    - dynamic sampling used for

32、0;this statement (level=2)  19. 統(tǒng)計(jì)信息  20. -  21.       12305  recursive calls  22.      538835  db block gets  23.      20393

33、7  consistent gets  24.       83057  physical reads  25.   428323528  redo size  26.         688  bytes sent via SQL*Net

34、 to client  27.         614  bytes received via SQL*Net from client  28.           3  SQL*Net roundtrips to/from client&

35、#160; 29.           2  sorts (memory)  30.           0  sorts (disk)  31.     2000000  rows processed 

36、60;32. SQL> commit;  33. 提交完成。  34. 已用時(shí)間:  00: 00: 00.04  35. SQL> insert /* +append */ into t2 select * from t3;  36. 已創(chuàng)建2000000行。  37. 已用時(shí)間:  00: 02:

37、60;02.63  38. 執(zhí)行計(jì)劃  39. -  40. Plan hash value: 4161002650  41. -  42. | Id  | Operation                | Name | Rows

38、60; | Bytes | Cost (%CPU)| Time     |  43. -  44. |   0 | INSERT STATEMENT         |      |  2316K|  

39、; 485M| 19014   (1)| 00:03:49 |  45. |   1 |  LOAD TABLE CONVENTIONAL | T2   |       |       |    &#

40、160;       |          |  46. |   2 |   TABLE ACCESS FULL      | T3   |  2316K|   485M

41、| 19014   (1)| 00:03:49 |  47. -   48. Note  49. -  50.    - dynamic sampling used for this statement (level=2)  51. 統(tǒng)計(jì)信息  52. -  53.   

42、;     7936  recursive calls  54.     6059147  db block gets  55.      158053  consistent gets  56.       56613 

43、0;physical reads  57.   790167468  redo size  58.         689  bytes sent via SQL*Net to client  59.         614  b

44、ytes received via SQL*Net from client  60.           3  SQL*Net roundtrips to/from client  61.           2  sorts (

45、memory)  62.           0  sorts (disk)  63.     2000000  rows processed  64. SQL> commit;  65. 提交完成。  66. 已用時(shí)間:  00: 00: 0

46、0.01  可以看見(jiàn):由于反向索引的數(shù)據(jù)塊比較分散了后,db block gets要稍微高一些。熱塊的爭(zhēng)用有所緩解,consistent gets有所下降,從203937下降到158053,減少了45884次。redo size 也變多了!再來(lái)做查詢,來(lái)看看他們的區(qū)別。1. SQL> set autotrace traceonly;  2. SQL> select OBJECT_NAME from t1 where id = 100;

47、  3. 已用時(shí)間:  00: 00: 00.06  4. 執(zhí)行計(jì)劃  5. -  6. Plan hash value: 1141790563  7. -  8. | Id  | Operation              &

48、#160;    | Name  | Rows  | Bytes | Cost (%CPU)| Time     |  9. -  10. |   0 | SELECT STATEMENT         &#

49、160;  |       |     1 |    79 |     0   (0)| 00:00:01 |  11. |   1 |  TABLE ACCESS BY INDEX

50、0;ROWID| T1    |     1 |    79 |     0   (0)| 00:00:01 |  12. |*  2 |   INDEX UNIQUE SCAN     &

51、#160;   | PK_T1 |     1 |       |     0   (0)| 00:00:01 |  13. -  14. Predicate Information (identified by operation

52、0;id):  15. -  16.    2 - access("ID"=100)  17. 統(tǒng)計(jì)信息  18. -  19.           0  recursive calls  20.        

53、;   0  db block gets  21.           4  consistent gets  22.           3  physical reads  23.   

54、        0  redo size  24.         434  bytes sent via SQL*Net to client  25.         416  bytes 

55、;received via SQL*Net from client  26.           2  SQL*Net roundtrips to/from client  27.           0  sorts (memory)&#

56、160; 28.           0  sorts (disk)  29.           1  rows processed  30. SQL> select OBJECT_NAME from t1 where i

57、d > 100 and id < 200;  31. 已選擇99行。  32. 已用時(shí)間:  00: 00: 01.10  33. 執(zhí)行計(jì)劃  34. -  35. Plan hash value: 1249713949  36. -  37. | Id  | Operatio

58、n                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |  38. -  39. |   0

59、60;| SELECT STATEMENT            |       |    99 |  7821 |     1   (0)| 00:00:01 |  40. | 

60、  1 |  TABLE ACCESS BY INDEX ROWID| T1    |    99 |  7821 |     1   (0)| 00:00:01 |  41. |*  2 |   I

61、NDEX RANGE SCAN          | PK_T1 |    99 |       |     1   (0)| 00:00:01 |  42. -  43. Predicate

62、0;Information (identified by operation id):  44. -  45.    2 - access("ID">100 AND "ID"<200)  46. Note  47. -  48.    - dynamic sampling us

63、ed for this statement (level=2)  49. 統(tǒng)計(jì)信息  50. -  51.           9  recursive calls  52.           0  db block&

64、#160;gets  53.         140  consistent gets  54.         189  physical reads  55.        2356  redo size 

65、 56.        2656  bytes sent via SQL*Net to client  57.         482  bytes received via SQL*Net from client  58.    

66、;       8  SQL*Net roundtrips to/from client  59.           0  sorts (memory)  60.           0  

67、;sorts (disk)  61.          99  rows processed  62.   63. SQL> select OBJECT_NAME from t2 where id = 100;  64. 已用時(shí)間:  00: 00: 00.05&

68、#160; 65. 執(zhí)行計(jì)劃  66. -  67. Plan hash value: 1480579010  68. -  69. | Id  | Operation                   | Name  

69、;| Rows  | Bytes | Cost (%CPU)| Time     |  70. -  71. |   0 | SELECT STATEMENT            |     

70、60; |     1 |    79 |     0   (0)| 00:00:01 |  72. |   1 |  TABLE ACCESS BY INDEX ROWID| T2    | 

71、60;   1 |    79 |     0   (0)| 00:00:01 |  73. |*  2 |   INDEX UNIQUE SCAN         | PK_T2 | &#

72、160;   1 |       |     0   (0)| 00:00:01 |  74. -  75. Predicate Information (identified by operation id):  76. -  77.   

73、; 2 - access("ID"=100)  78. 統(tǒng)計(jì)信息  79. -  80.           1  recursive calls  81.           0  db block 

74、;gets  82.           4  consistent gets  83.           1  physical reads  84.           0&

75、#160; redo size  85.         434  bytes sent via SQL*Net to client  86.         416  bytes received via SQL*Net from cli

76、ent  87.           2  SQL*Net roundtrips to/from client  88.           0  sorts (memory)  89.       

77、    0  sorts (disk)  90.           1  rows processed  91. SQL> select OBJECT_NAME from t2 where id > 100 and id <

78、60;200;  92. 已選擇99行。  93. 已用時(shí)間:  00: 00: 04.39  94. 執(zhí)行計(jì)劃  95. -  96. Plan hash value: 1513984157  97. -  98. | Id  | Operation        &

79、#160;| Name | Rows  | Bytes | Cost (%CPU)| Time     |  99. -  100. |   0 | SELECT STATEMENT  |      |   336 | 

80、26544 |  8282   (1)| 00:01:40 |  101. |*  1 |  TABLE ACCESS FULL| T2   |   336 | 26544 |  8282   (1)| 00:01:40 |  102. -

81、  103. Predicate Information (identified by operation id):  104. -  105.    1 - filter("ID">100 AND "ID"<200)  106. Note  107. -  108.    -

82、 dynamic sampling used for this statement (level=2)  109. 統(tǒng)計(jì)信息  110. -  111.          29  recursive calls  112.          

83、; 1  db block gets  113.       60187  consistent gets  114.       30335  physical reads  115.        5144  redo size  116.        2656  bytes sent via SQL*Net to client 

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論