




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025護(hù)士入院筆試題目及答案
- 工程造價(jià)計(jì)算試題及答案
- 房地產(chǎn)中介行業(yè)2025年規(guī)范發(fā)展與服務(wù)質(zhì)量提升營(yíng)銷策略報(bào)告
- 生物質(zhì)能源在分布式能源系統(tǒng)中的分布式能源應(yīng)用模式與優(yōu)化策略優(yōu)化報(bào)告
- 醫(yī)藥流通行業(yè)2025年供應(yīng)鏈風(fēng)險(xiǎn)管理與成本控制策略報(bào)告
- 職場(chǎng)語(yǔ)言運(yùn)用2025年商務(wù)英語(yǔ)考試試題及答案
- 整套心理測(cè)試題及答案
- 綜合課程設(shè)計(jì)試題及答案
- 山水貴州答案及試題解析
- 安全工程師應(yīng)試策略考題及答案
- 小石獅【經(jīng)典繪本】
- 大學(xué)計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)教程(高守平第2版)
- 2023年福建三明市初中畢業(yè)班數(shù)學(xué)質(zhì)量檢測(cè)卷(附答案)
- 金蝶固定資產(chǎn)管理系統(tǒng)
- LY/T 2457-2015西南樺培育技術(shù)規(guī)程
- GB/T 40998-2021變性淀粉中羥丙基含量的測(cè)定分光光度法
- GB/T 25840-2010規(guī)定電氣設(shè)備部件(特別是接線端子)允許溫升的導(dǎo)則
- 軍標(biāo)類型整理文檔
- FZ/T 52019-2011萊賽爾短纖維
- 止血包扎(課件)
- 2022年湖南高二學(xué)業(yè)水平合格考試政治試卷真題及答案詳解
評(píng)論
0/150
提交評(píng)論