mysql索引B+Tree碘菜,B-Tree數據結構和搜索引擎之間的關系

1,mysql的搜索引擎常用的有兩種MyISAM和InnoDB,那么我問大家一個問題队魏,搜索引擎是作用于表還是作用于數據庫呢?如果你真的不知道我建議你打開自己的表看一下臼疫,看下表的結構就明白了择份。


搜索引擎作用于表

那么這兩個搜索引擎具體有什么區(qū)別呢,我們找到自己的mysql的安裝目錄看下里面的結構烫堤,


不同搜索引擎生成的表的結構

我們從上圖可以看到搜索引擎為MyISAM的表包含.frm,.MYD,.MYI荣赶。而搜索引擎為InnoDB的表包含.frm和.ibd兩個文件,那么這幾個文件分別代表什么呢鸽斟?這個問題先放到這我們轉一個話題拔创,先了解一下mysql索引的常用的數據結構,看懂了這幾個數據結構富蓄,再結合搜索引擎我們就明白了剩燥。

索引是什么呢?

是幫助mysql高效獲取排好序的數據結構(最簡單明了)

索引的數據結構包含哪些立倍?

二叉樹灭红,紅黑樹,hash(看下mysql在創(chuàng)建索引的時候選擇索引類型的時候有這一個選項)口注,B-Tree,B+Tree,相信能有耐心想看完這遍文章的就是想徹底了解搜索引擎和索引之間的關系比伏,以及索引數據結構的,不要告訴我這幾個數據結構沒聽過疆导,什么是紅黑樹不知道的話建議去看下jdk1.8的hashmap的數據結構理解赁项。https://www.cs.usfca.edu/~galles/visualization/Algorithms.html這個網站是數據結構可視化用的,建議你收藏澈段。

為什么我們的索引不用二叉樹呢悠菜,因為二叉樹有可能退化成鏈表結構結構,那么查詢效率就將會收到極大的限制败富,紅黑樹是一個自平衡二叉樹悔醋,我們用到的B-Tree是對二叉樹進行了橫向的擴展,為什么這么說呢兽叮,我的B-Tree或者B+Tree存儲的都是一組索引或者一組索引加上數據data,一個節(jié)點大概可以存儲16k芬骄,一般的索引是int或者bigint那么就可以一個節(jié)點存儲16kb/14b=1170個數據,那么h=3高度的就可以存儲最多為1170*1170*16大概為2千萬數據量鹦聪,一個16k的數據在進行磁盤io的時候是很快的账阻,所以加了索引以后2千萬的數據也就用幾百秒。

B-tree的數據結構

字體寫的不太好看泽本,能看懂就行淘太,葉子節(jié)點的指針為空

B-Tree的數據結構

mysql選擇B+Tree是B-Tree的變種,兩者比較有什么區(qū)別呢?我們講完本節(jié)希望你能自己得出結論蒲牧,

B+Tree的特點

1撇贺,非葉子節(jié)點不存儲data,只存儲索引(冗余)索引字段在節(jié)點間有重復,看下? B-Tree有沒有這個重復的現象冰抢,當然沒有

2松嘶,非葉子節(jié)點包含所有的索引字段,B-Tree則包含索引對應的data字段

3挎扰,葉子節(jié)點用指針鏈接翠订,提高區(qū)間的訪問性能,我們在做業(yè)務開發(fā)的時候進行區(qū)間查詢是常用的鼓鲁,B+Tree進行區(qū)間查詢的效率要比B-Tree高很多蕴轨,看下圖如果查詢18到39之間的數據的話,B-Tree需要回到根節(jié)點重新遍歷一遍骇吭,而B+Tree葉子節(jié)點之間有指針可以直接查詢橙弱。并且節(jié)點存儲的是索引比B-Tree可以更多的存儲


B+Tree的數據結構

好了數據結構這塊相信你理解了如果不理解可以留言。

那么我們回到之前的問題有關搜索引擎分別為MyISAM和InnoDB的存儲數據索引的了解燥狰,我們先來看下MyISAM科吭,上面提到了三個文件如果你忘了建議回去看一下叫什么吁峻,最好看下自己的安裝目錄的內容。


搜索引擎為MyISAM存儲

上面為們可以看出MyISAM索引文件和數據文件是分離的所以我們稱為非聚集索引,data存儲的是索引所在元素的磁盤地址指針案疲,我們會根據這個磁盤地址指針回查表恕洲。從上圖的標志我們可以看到MYI和MYD分別指的是mysql的index 和mysql的data.那么也不難理解innodb的文件.idb是索引文件和data文件的組合也稱為聚集索引


搜索引擎為innodb的數據存儲

我們需要了解一下Innodb必須有逐漸因為數據結構的要求靴迫,如果建表的時候沒有主鍵点弯,那么innodb會自動給你創(chuàng)建使用uuid,我們不建議innodb自己創(chuàng)建的希望用整形自增的,因為我們在查索引數據結構的時候會進行索引大小的比較榛了,如果為UUID在讶,則數據就比較大,比較起來比較慢霜大。

我們簡單補充一下聯合索引的底層存儲結構長什么樣子构哺?


聯合索引的數據結構途中為三個字段的聯合索引

那么我們的索引有hash數據結構,查找單個數特別塊但是不支持范圍的查找战坤,B+Tree在范圍查找做的特別好曙强,葉子節(jié)點帶雙向鏈接,B-Tree則在范圍查找的時候很大可能需要重復從根節(jié)點查速度會特別慢途茫。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末碟嘴,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子慈省,更是在濱河造成了極大的恐慌臀防,老刑警劉巖眠菇,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件边败,死亡現場離奇詭異袱衷,居然都是意外死亡,警方通過查閱死者的電腦和手機笑窜,發(fā)現死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門致燥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人排截,你說我怎么就攤上這事嫌蚤。” “怎么了断傲?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵脱吱,是天一觀的道長。 經常有香客問我认罩,道長箱蝠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任垦垂,我火速辦了婚禮宦搬,結果婚禮上,老公的妹妹穿的比我還像新娘劫拗。我一直安慰自己间校,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布页慷。 她就那樣靜靜地躺著憔足,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酒繁。 梳的紋絲不亂的頭發(fā)上滓彰,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音欲逃,去河邊找鬼找蜜。 笑死,一個胖子當著我的面吹牛稳析,可吹牛的內容都是我干的洗做。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼彰居,長吁一口氣:“原來是場噩夢啊……” “哼诚纸!你這毒婦竟也來了?” 一聲冷哼從身側響起陈惰,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤畦徘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體井辆,經...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡关筒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了杯缺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒸播。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萍肆,靈堂內的尸體忽然破棺而出袍榆,到底是詐尸還是另有隱情,我是刑警寧澤塘揣,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布包雀,位于F島的核電站,受9級特大地震影響亲铡,放射性物質發(fā)生泄漏才写。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一奴愉、第九天 我趴在偏房一處隱蔽的房頂上張望琅摩。 院中可真熱鬧,春花似錦锭硼、人聲如沸房资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轰异。三九已至,卻和暖如春暑始,著一層夾襖步出監(jiān)牢的瞬間搭独,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工廊镜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牙肝,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓嗤朴,卻偏偏與公主長得像配椭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雹姊,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內容