索引數(shù)據(jù)結(jié)構(gòu):B-Tree與B+Tree詳解

1酗电、思考??問(wèn)題為什么要使用索引?

  • 索引能極大的減少存儲(chǔ)引擎需要掃描的數(shù)據(jù)量内列。
  • 索引可以把隨機(jī)IO變成順序IO撵术。
  • 索引可以幫助我們?cè)谶M(jìn)行分組、排序等操作時(shí)话瞧,避免使
    用臨時(shí)表嫩与。

2、思考??問(wèn)題索引的底層數(shù)據(jù)結(jié)構(gòu)有哪些交排,優(yōu)缺點(diǎn)是什么划滋?

索引常用的數(shù)據(jù)結(jié)構(gòu)有:
1、hash結(jié)構(gòu)埃篓。
2古毛、B+Tree結(jié)構(gòu)。

索引結(jié)構(gòu) 優(yōu)點(diǎn) 缺點(diǎn)
hash結(jié)構(gòu) 數(shù)據(jù)量小時(shí)等值查詢效率高 1都许、索引無(wú)法完成排序。
2嫂冻、無(wú)法區(qū)間查詢胶征。
3、無(wú)法利用部分索引 桨仿。
4睛低、大量Hash值沖突,性能無(wú)法保證。
B+Tree結(jié)構(gòu) 1钱雷、減少掃描的數(shù)據(jù)量骂铁。
2、把隨機(jī)IO變成了順序IO罩抗。
3拉庵、hash的缺點(diǎn)
占用物理空間

3、思考??為什么是B+Tree套蒂?

Tree的數(shù)據(jù)結(jié)構(gòu):
1钞支、二叉查找樹:(Binary Search Tree)
缺點(diǎn):樹的高度沒(méi)有約束,導(dǎo)致查詢效率時(shí)間復(fù)雜度較高O(n)操刀。


二叉查找樹

2烁挟、平衡二叉樹(AVL樹):(Balance Binary Search Tree)
缺點(diǎn):改善了查詢的復(fù)雜度問(wèn)題(約束了左右子樹相差高度不能大于1),但是樹的高度==IO次數(shù)骨坑,即使左右子樹拉平了撼嗓,但是高度帶來(lái)的IO問(wèn)題依然無(wú)法接收,而且每塊磁盤塊(節(jié)點(diǎn)/頁(yè))太小欢唾,沒(méi)有利用好IO數(shù)據(jù)交換特性且警。


平衡二叉樹

3、B-Tree結(jié)構(gòu)(多路平衡樹):
缺點(diǎn):


多路平衡樹
一顆 m 階B-tree的定義:一個(gè)節(jié)點(diǎn)最多有 n 個(gè)key(關(guān)鍵字)匈辱,那么這個(gè)節(jié)點(diǎn)最多就會(huì)有 n+1 個(gè)子節(jié)點(diǎn)振湾,這棵樹就叫做 n+1(m=n+1)階樹。(個(gè)節(jié)點(diǎn)能擁有的最大子節(jié)點(diǎn)數(shù)來(lái)表示這顆樹的階數(shù))
一棵m階的B-Tree有如下特性:關(guān)鍵字(n)亡脸, 路/階(m)押搪,度()
1. 每個(gè)節(jié)點(diǎn)最多有m個(gè)子節(jié)點(diǎn)。 
2. 除了根節(jié)點(diǎn)和葉子節(jié)點(diǎn)外浅碾,其它每個(gè)節(jié)點(diǎn)至少有Ceil(m/2)個(gè)孩子大州。 
3. 若根節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則至少有2個(gè)孩子垂谢。 
4. 所有葉子節(jié)點(diǎn)都在同一層厦画,且不包含其它關(guān)鍵字信息。
5. 關(guān)鍵字的個(gè)數(shù)n滿足:ceil(m/2)-1 <= n <= m-1 
6. ki(i=1,…n)為關(guān)鍵字滥朱,且關(guān)鍵字升序排序根暑。 
7. Pi(i=1,…n)為指向子樹根節(jié)點(diǎn)的指針。P(i-1)指向的子樹的所有節(jié)點(diǎn)關(guān)鍵字均小于ki徙邻,但都大于k(i-1)
8. 每個(gè)非終端節(jié)點(diǎn)包含n個(gè)關(guān)鍵字信息(P0,P1,…Pn, k1,…kn) 

階(m):P1排嫌、P2、P3
關(guān)鍵字(n):n<=m-1
高度:xx
如圖:階=3缰犁,關(guān)鍵字=2淳地。
mysql默認(rèn)最小的磁盤塊空間大胁篮:16k,int 類型的id作為關(guān)鍵字大衅南蟆:4byte+4byte伍伤。所以關(guān)鍵字個(gè)數(shù)=磁盤塊空間/id:
關(guān)鍵字最多個(gè)數(shù)=(16*1024)/(4+4)=2048個(gè),那么度<=路<=2048+1=2049遣钳。(盡量通過(guò)增加路來(lái)降低高度)
查看mysql頁(yè)的數(shù)據(jù)大腥呕辍:show variables like 'innodb_page_size';

4、B+Tree結(jié)構(gòu):

缺點(diǎn):


image.png

B+Tree與B-Tree區(qū)別:

1耍贾,B+節(jié)點(diǎn)關(guān)鍵字搜索采用閉合區(qū)間阅爽。
2,B+非葉節(jié)點(diǎn)不保存數(shù)據(jù)相關(guān)信息荐开,只保存關(guān)鍵字和子節(jié)點(diǎn)的引用付翁。
3,B+關(guān)鍵字對(duì)應(yīng)的數(shù)據(jù)保存在葉子節(jié)點(diǎn)中晃听。 
4百侧,B+葉子節(jié)點(diǎn)是順序排列的,并且相鄰節(jié)點(diǎn)具有順序引用的關(guān)系能扒。

B+Tree優(yōu)勢(shì):

B+樹是B-樹的變種(PLUS版)多路絕對(duì)平衡查找樹佣渴,他擁有B-樹的優(yōu)勢(shì)。
B+樹掃庫(kù)初斑、表能力更強(qiáng)辛润。
B+樹的磁盤讀寫能力更強(qiáng)。
B+樹的排序能力更強(qiáng)见秤。
B+樹的查詢效率更加穩(wěn)定(仁者見仁砂竖、智者見智)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鹃答,一起剝皮案震驚了整個(gè)濱河市乎澄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌测摔,老刑警劉巖置济,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锋八,居然都是意外死亡浙于,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門挟纱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)路媚,“玉大人,你說(shuō)我怎么就攤上這事樊销≌鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵围苫,是天一觀的道長(zhǎng)裤园。 經(jīng)常有香客問(wèn)我,道長(zhǎng)剂府,這世上最難降的妖魔是什么拧揽? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮腺占,結(jié)果婚禮上淤袜,老公的妹妹穿的比我還像新娘。我一直安慰自己衰伯,他們只是感情好铡羡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著意鲸,像睡著了一般烦周。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怎顾,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天读慎,我揣著相機(jī)與錄音,去河邊找鬼槐雾。 笑死夭委,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赖歌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸭丛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起减细,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杏死,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捆交,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年淑翼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品追。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玄括,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肉瓦,到底是詐尸還是另有隱情遭京,我是刑警寧澤胃惜,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站哪雕,受9級(jí)特大地震影響船殉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斯嚎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一利虫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堡僻,春花似錦糠惫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至陌选,卻和暖如春理郑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咨油。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工您炉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人役电。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓赚爵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親法瑟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冀膝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359