為什么 MongoDB 索引選擇B樹,而 Mysql 索引選擇B+樹(精干總結)

本文獻給準備面試或者是還在面試的你繁仁。常見面試題涉馅,送分題目,不拿白不拿改备。

本文收錄在個人博客《愚公要移山》中控漠,地址 www.javachat.cc

這篇是修改版,針對知乎上很多人提出的問題悬钳,進行了一次修復

一盐捷、B樹和B+樹的區(qū)別

很明顯,我們想向弄清楚原因就要知道B樹和B+樹的區(qū)別默勾。為了不長篇大論碉渡。我們直接給出他們的形式總結他們的特點。

1母剥、B樹

B樹是一種自平衡的搜索樹滞诺,形式很簡單:

image

這就是一顆B-樹。針對我們這個問題的最核心的特點如下:

(1)多路环疼,非二叉樹

(2)每個節(jié)點既保存索引习霹,又保存數據

(3)搜索時相當于二分查找

其他的基本上都是一些常見的數據結構,假定都已經了解了B樹相關的結構炫隶。

2淋叶、B+樹

B+樹是B樹的變種

image

最核心的特點如下:

(1)多路非二叉

(2)只有葉子節(jié)點保存數據

(3)搜索時相當于二分查找

(4)增加了相鄰接點的指向指針。

從上面我們可以看出最核心的區(qū)別主要有倆伪阶,

一個是數據的保存位置:B樹保存在所有的節(jié)點中煞檩,B+樹保存在葉子節(jié)點

一個是相鄰節(jié)點的指向:B樹葉子節(jié)點之間沒有指針处嫌,B+樹有

這里區(qū)別分別給B樹和B+樹帶來了什么好處呢?其實對于數據庫來說斟湃,選用什么數據結構無非就是為了增刪改查和存儲更加高效熏迹,因為找特點時也要從這個點去回答。

3凝赛、從區(qū)別找特點

第一:查找元素

(1)B樹的數據保存在所有節(jié)點注暗,查詢復雜度最好是 O(1)。

(2)B+樹的數據保存在葉子節(jié)點哄酝,查詢時間復雜度固定是O(log(n))

第二:區(qū)間查找

(1)B樹每個節(jié)點 key 和 data 在一起友存,則無法區(qū)間查找。

(2)B+樹相鄰接點的指針可以大大增加區(qū)間訪問性陶衅,可使用在范圍查詢等

第三:存儲

(1)B樹每個節(jié)點即保存數據又保存索引屡立,所以每一節(jié)點特別大,這一層所有節(jié)點加起來數據量將非常大搀军。磁盤每次IO一定量的數據膨俐,對于Mysql來說如何衡量查詢效率呢?就是磁盤IO次數罩句。既然B樹每一層特別大焚刺,那每一層就需要對數據分開從而進行多次IO操作。所有Mysql不用门烂。

(2)B+樹更適合外部存儲乳愉,也就是磁盤存儲。由于內節(jié)點無 data 域屯远,每個節(jié)點能索引的范圍更大更精確蔓姚,所以不需要用B+樹。

有了他們的區(qū)別之后慨丐,現在我們再來解釋這個原因就好多了坡脐。

二、原因解釋

上面解釋了不使用的原因房揭,我們再來看為什么Mysql使用B+樹备闲,而MongoDB使用B樹,想要解釋原因捅暴,我們還必須要了解一下MongoDB和Mysql的基本概念恬砂。

1、MongoDB

MongoDB 是文檔型的數據庫蓬痒,是一種 nosql觉既,它使用類 Json 格式保存數據。比如之前我們的表可能有用戶表乳幸、訂單表瞪讼、購物籃表等等,還要建立他們之間的外鍵關聯關系粹断。但是類Json就不一樣了符欠。

image

我們可以看到這種形式更簡單,通俗易懂瓶埋。那為什么 MongoDB 使用B-樹呢希柿?

MongoDB使用B樹,所有節(jié)點都有Data域养筒,只要找到指定索引就可以進行訪問曾撤,無疑單次查詢平均快于Mysql

2晕粪、Mysql

Mysql作為一個關系型數據庫挤悉,數據的關聯性是非常強的,區(qū)間訪問是常見的一種情況巫湘,B+樹由于數據全部存儲在葉子節(jié)點装悲,并且通過指針串在一起,這樣就很容易的進行區(qū)間遍歷甚至全部遍歷尚氛。

還有一點诀诊,B+樹只有葉子節(jié)點保存數據,所以每一節(jié)點比較小阅嘶,每一層所有節(jié)點加起來數據量也相對比較小属瓣。磁盤每次IO一定量的數據,對于Mysql來說讯柔。既然B+樹每一層小抡蛙,那每一層只需要少量IO操作。

這倆區(qū)別的核心如果你能看懂B-樹和B+樹的區(qū)別就很容易理解磷杏。

回復關鍵字獲取java相關5T資源溜畅,

視頻,電子書,面試,簡歷,IDEA破解等

只有你想不到的,沒有找不到

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末极祸,一起剝皮案震驚了整個濱河市慈格,隨后出現的幾起案子,更是在濱河造成了極大的恐慌遥金,老刑警劉巖浴捆,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異稿械,居然都是意外死亡选泻,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來页眯,“玉大人梯捕,你說我怎么就攤上這事∥涯欤” “怎么了傀顾?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碌奉。 經常有香客問我短曾,道長,這世上最難降的妖魔是什么赐劣? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任嫉拐,我火速辦了婚禮,結果婚禮上魁兼,老公的妹妹穿的比我還像新娘婉徘。我一直安慰自己,他們只是感情好璃赡,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布判哥。 她就那樣靜靜地躺著,像睡著了一般碉考。 火紅的嫁衣襯著肌膚如雪塌计。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天侯谁,我揣著相機與錄音锌仅,去河邊找鬼。 笑死墙贱,一個胖子當著我的面吹牛热芹,可吹牛的內容都是我干的。 我是一名探鬼主播惨撇,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼伊脓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了魁衙?” 一聲冷哼從身側響起报腔,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤群嗤,失蹤者是張志新(化名)和其女友劉穎棋返,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體却嗡,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡纵隔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年翻诉,在試婚紗的時候發(fā)現自己被綠了炮姨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡碰煌,死狀恐怖舒岸,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拄查,我是刑警寧澤吁津,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堕扶,受9級特大地震影響,放射性物質發(fā)生泄漏梭依。R本人自食惡果不足惜稍算,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望役拴。 院中可真熱鬧糊探,春花似錦、人聲如沸河闰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姜性。三九已至瞪慧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間部念,已是汗流浹背弃酌。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留儡炼,地道東北人妓湘。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像乌询,于是被迫代替她去往敵國和親榜贴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容