B+ tree索引

本篇以O(shè)racle 11g秫逝,具體SQL與執(zhí)行圖解為例詳解B+ tree索引,多年前的學(xué)習(xí)筆記,如有問題歡迎討論竹捉。


先上一個(gè)索引結(jié)構(gòu)圖,索引原理就是利用索引快速找到數(shù)據(jù)行的rowid尚骄,然后再根據(jù)rowid回表找到數(shù)據(jù)行块差,如果在t2.object_id上建一個(gè)索引 create index idx_t2_object_id on t2(object_id);此索引相當(dāng)于select object_id ,rowid from t2 order by object_id;

B+tree索引結(jié)構(gòu)

下面以具體SQL與圖示掃描路徑講解

select * from t2 where object_id<600;掃描路徑(索引默認(rèn)升序掃描憨闰,回表部分沒畫出來状蜗,掃描完)

索引塊掃描路徑

select * from t2 where object_id<600 order by object_id desc;

select * from t2 where object_id>600 and object_id<2000

接下來oracle的幾種索引掃描方式

1.INDEX?FULL?SCAN?(MIN/MAX)?

INDEX?FULL?SCAN?(MIN/MAX)表示索引最小/最大值掃描,單塊讀鹉动,該訪問路徑發(fā)生在?SELECT?MAX(COLUMN)?FROM?TABLE?或者SELECT?MIN(COLUMN)?FROM?TABLE等SQL語句中轧坎。INDEX?FULL?SCAN?(MIN/MAX)只會(huì)訪問“索引高度”個(gè)索引塊,其性能與INDEX?UNIQUE?SCAN一樣泽示,僅次于TABLE?ACCESS?BY?USER?ROWID缸血。

select max(object_id) from t2;

執(zhí)行計(jì)劃


select min(object_id) from t2;


掃描路徑

看懂了來嘗試優(yōu)化一下這個(gè)sql吧:select max(object_id),min(object_id) from t2;

2.INDEX FAST FULL SCAN

INDEX?FAST?FULL?SCAN(不會(huì)自動(dòng)排序,常代替全表掃描): INDEX?FAST?FULL?SCAN?表示索引快速全掃描械筛,多塊讀捎泻。HINT:INDEX_FFS(表名/別名?索引名)。當(dāng)需要從表中查詢出大量數(shù)據(jù)埋哟,但是只需要獲取表中部分列的數(shù)據(jù)笆豁,那么這時(shí)可以利用索引快速全掃描代替全表掃描來提升性能。索引快速全掃描的掃描方式與全表掃描的掃描方式是一樣赤赊,都是按區(qū)掃描渔呵,所以它可以多塊讀,并且可以并行掃描砍鸠。等待事件為db?file?scattered?read扩氢,如果是并行掃描,等待事件為direct?path?read爷辱。

select?owner,object_name?from?test;

沒有where條件? 不能走唯一 index unique scan 和 范圍 index range scan录豺,沒有order by? 不能走index full scan,這個(gè)sql走全表掃描會(huì)訪問所有字段 造成浪費(fèi)饭弓。把這兩個(gè)字段建一個(gè)索引create index ob_name_owner on t2(object_name,owner,1);

執(zhí)行計(jì)劃

index fast full scan 不能回表双饥, 唯一作用就是用來代替 table access full,索引快速全掃描的掃描方式與 全表掃描 一樣的

3.INDEX RANGE SCAN 索引范圍掃描:單塊讀弟断,返回的數(shù)據(jù)是有序的(默認(rèn)升序)咏花。

select?*?from?t2?where?object_id<100?order?by?object_id?desc;

執(zhí)行計(jì)劃

對唯一索引或者主鍵進(jìn)行范圍查找,對非唯一索引進(jìn)行等值查找阀趴,范圍查找昏翰,就會(huì)發(fā)生INDEX RANGE SCAN。等待事件為db file sequential read

4.?INDEX?UNIQUE?SCAN表示索引唯一掃描刘急,單塊讀棚菊。

create?unique?index?idx_t2_id?on?t2(object_id); 創(chuàng)建唯一索引,對唯一索引或者對主鍵列進(jìn)行等值查找叔汁,就會(huì)走INDEX?UNIQUE?SCAN统求,因?yàn)閷ξㄒ凰饕蛘邔χ麈I列進(jìn)行等值查找检碗,CBO能確保最多只返回1行數(shù)據(jù),所以這時(shí)可以走索引唯一掃描码邻。

執(zhí)行計(jì)劃

索引唯一掃描 index unique scan 掃描幾個(gè)索引塊 折剃?有多少索引高度,就掃描幾個(gè)索引塊像屋。索引高度:圖下這個(gè)索引高度是3

還有個(gè)索引跳躍掃描 微驶,是在索引首列基數(shù)低的情況下才會(huì)走,沒找到筆記懶得寫了問題不大开睡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末因苹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子篇恒,更是在濱河造成了極大的恐慌扶檐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁艰,死亡現(xiàn)場離奇詭異款筑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腾么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門奈梳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人解虱,你說我怎么就攤上這事攘须。” “怎么了殴泰?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵于宙,是天一觀的道長。 經(jīng)常有香客問我悍汛,道長捞魁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任离咐,我火速辦了婚禮谱俭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵蛀。我一直安慰自己昆著,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布糖埋。 她就那樣靜靜地躺著宣吱,像睡著了一般窃这。 火紅的嫁衣襯著肌膚如雪瞳别。 梳的紋絲不亂的頭發(fā)上征候,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音祟敛,去河邊找鬼疤坝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馆铁,可吹牛的內(nèi)容都是我干的跑揉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼埠巨,長吁一口氣:“原來是場噩夢啊……” “哼历谍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辣垒,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤望侈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后勋桶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱衙,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年例驹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捐韩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹃锈,死狀恐怖荤胁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屎债,我是刑警寧澤寨蹋,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站扔茅,受9級(jí)特大地震影響已旧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜召娜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一运褪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玖瘸,春花似錦秸讹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔑匣,卻和暖如春劣欢,著一層夾襖步出監(jiān)牢的瞬間棕诵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工凿将, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留校套,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓牧抵,卻偏偏與公主長得像笛匙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子犀变,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容