InnoDB-索引

這個(gè)索引真的是面試必考題谁鳍,但是我也不知道面試官問這玩意有啥用,回答都是百度的,問一百個(gè)人倘潜,90個(gè)人回答的一樣绷柒,剩下是十個(gè)人是沒背下來。
而且背了容易忘涮因。我就是被了好幾遍都記不住废睦。
所以我決定看看索引到底是個(gè)什么東西,知道了原理养泡,也就很難忘記了嗜湃。

索引這個(gè)東西常見這幾種:
1.普通索引
2.唯一索引
3.主鍵索引
4.聯(lián)合索引

我們先來所以下主鍵索引是怎么搞的,其他索引類似澜掩。

這篇文章中講了在InnoDB的索引頁(yè)中是怎么根據(jù)主鍵查數(shù)據(jù)的购披。
但是問題是,索引頁(yè)多了怎么辦肩榕?
不還是要從第一個(gè)頁(yè)查起刚陡,一個(gè)一個(gè)去查。這樣有一萬(wàn)個(gè)頁(yè)株汉,不還是會(huì)有問題筐乳。
所以為了解決這個(gè)問題,新搞了一個(gè)一種記錄
之前record_type就是記錄中表示記錄類型的地方乔妈。
0表示普通記錄
1目錄項(xiàng)記錄
2表示最小記錄
3表示最大記錄

因?yàn)轫?yè)內(nèi)蝙云,有槽作為目錄,可以使用二分法快速查詢褒翰,那頁(yè)我們也來搞一個(gè)目錄
下圖中的key就是該頁(yè)最小索引值贮懈,page_no就是頁(yè)號(hào)

WechatIMG50.png

這樣的話,如果我們?nèi)ゲ樗饕秊?的數(shù)據(jù)优训,就現(xiàn)在目錄中查朵你,知道了在28頁(yè),在用頁(yè)內(nèi)查詢辦法揣非,去查詢抡医。
但是這些目錄要存起來啊,所以就把這一條一條數(shù)據(jù)變成了一條目錄項(xiàng)記錄早敬,這條記錄的record_type就是1

把這樣的多條數(shù)據(jù)放在一個(gè)頁(yè)中


WechatIMG51.png

就組成了這樣的一個(gè)東西忌傻。
數(shù)據(jù)量繼續(xù)增加,導(dǎo)致目錄項(xiàng)記錄的頁(yè)頁(yè)特別多搞监,那就意思類推水孩,在向上建立目錄項(xiàng)記錄頁(yè)。最后層層向上琐驴,最終形成如下


WechatIMG52.png

這就成了樹俘种,也就是B+樹秤标。
這些頁(yè),都統(tǒng)一稱作節(jié)點(diǎn)
最下層節(jié)點(diǎn)稱作葉子節(jié)點(diǎn)/葉節(jié)點(diǎn)
用來存放目錄項(xiàng)的節(jié)點(diǎn)成為非葉子節(jié)點(diǎn)/內(nèi)節(jié)點(diǎn)
最上層稱作根節(jié)點(diǎn)

所有葉子節(jié)點(diǎn)是存放用戶數(shù)據(jù)的
所有內(nèi)節(jié)點(diǎn)是存放目錄記錄數(shù)據(jù)的

有兩個(gè)特點(diǎn):
1.使用記錄主鍵值的大小進(jìn)行記錄和頁(yè)的排序宙刘,分為三方面
頁(yè)內(nèi)記錄是按照主鍵大小順序拍成一個(gè)單向鏈表
各個(gè)存放用戶記錄的頁(yè)也是根據(jù)頁(yè)中記錄的主鍵大小順序拍成的一個(gè)雙向鏈表
存放目錄記錄的頁(yè)苍姜,分為不同的層次,在同一層次悬包,也是按照記錄記錄的主鍵大小排序
2.葉子節(jié)點(diǎn)儲(chǔ)存的是完整的用戶記錄

具有這兩種特點(diǎn)的B+樹成為聚簇索引衙猪,這也是InnoDB中數(shù)據(jù)儲(chǔ)存的方式。

二級(jí)索引

上面說的只是主鍵索引布近,但是查別的時(shí)候不久不可以了嗎垫释?
所以按照別的列搜索怎么辦?
那就再栽一棵樹撑瞧。
這里的樹排序方式不是按照索引饶号,而是按照特定的列去排序。并且數(shù)據(jù)記錄中只有主鍵和索引值季蚂。
目錄記錄頁(yè)中的數(shù)據(jù)也是索引列和主鍵(主鍵的存在是為了唯一)
所以創(chuàng)建這樣一個(gè)樹之后茫船,在去按照該索引列查數(shù)據(jù)的時(shí)候,是先在這個(gè)樹中查出來主鍵扭屁,在去聚簇索引中根據(jù)主鍵查出所有數(shù)據(jù)算谈。

也就是說,這樣查了兩個(gè)樹料滥,第二次也被稱為回表然眼。

聯(lián)合索引

有時(shí)候可能會(huì)有列1和列2進(jìn)行聯(lián)合索引
這樣就是在二級(jí)索引的基礎(chǔ)上加上一列。
排序方式是先按照列1進(jìn)行排序葵腹,有相同的在按照列2排序高每。

根節(jié)點(diǎn)

前面的敘述,感覺上像是先有的用戶記錄践宴,然后在向上產(chǎn)生內(nèi)節(jié)點(diǎn)鲸匿,根節(jié)點(diǎn)。但是事實(shí)不是這樣的阻肩。
首先一個(gè)表創(chuàng)刊一個(gè)B+樹索引的時(shí)候带欢,都會(huì)創(chuàng)建一個(gè)根節(jié)點(diǎn)。最開始啥都沒有烤惊,就是個(gè)空頁(yè)乔煞。
然后慢慢填充,一開始按照正常的頁(yè)去填充柒室,知道這個(gè)頁(yè)滿了渡贾。
如果在添加一條數(shù)據(jù),這個(gè)根節(jié)點(diǎn)的頁(yè)就會(huì)將所有的用戶記錄復(fù)制一份到新的頁(yè)雄右,然后進(jìn)行頁(yè)分裂(因?yàn)橐粋€(gè)頁(yè)不夠裝了)空骚。這時(shí)候根節(jié)點(diǎn)就會(huì)變成目錄記錄頁(yè)锦溪。
待目錄記錄頁(yè)裝滿之后,還會(huì)復(fù)制到新的頁(yè)中進(jìn)行頁(yè)分裂府怯,增加一個(gè)層級(jí)。
根節(jié)點(diǎn)的頁(yè)碼萬(wàn)年不變防楷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牺丙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子复局,更是在濱河造成了極大的恐慌冲簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿昏,死亡現(xiàn)場(chǎng)離奇詭異峦剔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)角钩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門吝沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人递礼,你說我怎么就攤上這事惨险。” “怎么了脊髓?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辫愉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我将硝,道長(zhǎng)恭朗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任依疼,我火速辦了婚禮痰腮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘律罢。我一直安慰自己诽嘉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布弟翘。 她就那樣靜靜地躺著虫腋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稀余。 梳的紋絲不亂的頭發(fā)上悦冀,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音睛琳,去河邊找鬼盒蟆。 笑死踏烙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的历等。 我是一名探鬼主播讨惩,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寒屯!你這毒婦竟也來了荐捻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寡夹,失蹤者是張志新(化名)和其女友劉穎处面,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菩掏,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魂角,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了智绸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片野揪。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧栗,靈堂內(nèi)的尸體忽然破棺而出囱挑,到底是詐尸還是另有隱情,我是刑警寧澤沼溜,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布平挑,位于F島的核電站,受9級(jí)特大地震影響系草,放射性物質(zhì)發(fā)生泄漏通熄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一找都、第九天 我趴在偏房一處隱蔽的房頂上張望唇辨。 院中可真熱鬧,春花似錦能耻、人聲如沸赏枚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饿幅。三九已至,卻和暖如春戒职,著一層夾襖步出監(jiān)牢的瞬間栗恩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工洪燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磕秤,地道東北人乳乌。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像市咆,于是被迫代替她去往敵國(guó)和親汉操。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354