索引-MyISAM與InnoDB索引差異

數(shù)據(jù)庫索引熏矿,到底是什么做的?》介紹了B+樹孝凌,它是一種非常適合用來做數(shù)據(jù)庫索引的數(shù)據(jù)結(jié)構(gòu):

(1)很適合磁盤存儲(chǔ)方咆,能夠充分利用局部性原理,磁盤預(yù)讀蟀架;

(2)很低的樹高度瓣赂,能夠存儲(chǔ)大量數(shù)據(jù);

(3)索引本身占用的內(nèi)存很衅摹煌集;

(4)能夠很好的支持單點(diǎn)查詢,范圍查詢捌省,有序性查詢苫纤;

數(shù)據(jù)庫的索引分為主鍵索引(Primary Inkex)與普通索引(Secondary Index)。InnoDB和MyISAM是怎么利用B+樹來實(shí)現(xiàn)這兩類索引纲缓,其又有什么差異呢卷拘?這是今天要聊的內(nèi)容。

一色徘,MyISAM的索引

MyISAM的索引與行記錄是分開存儲(chǔ)的恭金,叫做非聚集索引(UnClustered Index)操禀。

其主鍵索引與普通索引沒有本質(zhì)差異:

1.有連續(xù)聚集的區(qū)域單獨(dú)存儲(chǔ)行記錄

2.主鍵索引的葉子節(jié)點(diǎn)褂策,存儲(chǔ)主鍵,與對(duì)應(yīng)行記錄的指針

3.普通索引的葉子結(jié)點(diǎn),存儲(chǔ)索引列斤寂,與對(duì)應(yīng)行記錄的指針

畫外音:MyISAM的表可以沒有主鍵耿焊。

主鍵索引與普通索引是兩棵獨(dú)立的索引B+樹,通過索引列查找時(shí)遍搞,先定位到B+樹的葉子節(jié)點(diǎn)罗侯,再通過指針定位到行記錄。

舉個(gè)例子溪猿,MyISAM:

t(id PK, name KEY, sex, flag);

表中有四條記錄:

1, shenjian, m, A

3, zhangsan, m, A

5, lisi, m, A

9, wangwu, f, B


其B+樹索引構(gòu)造如上圖:

1.行記錄單獨(dú)存儲(chǔ)

2.id為PK钩杰,有一棵id的索引樹,葉子指向行記錄

3.name為KEY诊县,有一棵name的索引樹讲弄,葉子也指向行記錄

二、InnoDB的索引

InnoDB的主鍵索引與行記錄是存儲(chǔ)在一起的依痊,故叫做聚集索引(Clustered Index):

1.沒有單獨(dú)區(qū)域存儲(chǔ)行記錄

2.主鍵索引的葉子節(jié)點(diǎn)避除,存儲(chǔ)主鍵,與對(duì)應(yīng)行記錄(而不是指針)

畫外音:因此胸嘁,InnoDB的PK查詢是非称堪冢快的。

因?yàn)檫@個(gè)特性性宏,InnoDB的表必須要有聚集索引:

(1)如果表定義了PK群井,則PK就是聚集索引;

(2)如果表沒有定義PK毫胜,則第一個(gè)非空unique列是聚集索引蝌借;

(3)否則,InnoDB會(huì)創(chuàng)建一個(gè)隱藏的row-id作為聚集索引指蚁;

聚集索引菩佑,也只能夠有一個(gè),因?yàn)閿?shù)據(jù)行在物理磁盤上只能有一份聚集存儲(chǔ)凝化。

InnoDB的普通索引可以有多個(gè)稍坯,它與聚集索引是不同的:

1.普通索引的葉子節(jié)點(diǎn),存儲(chǔ)主鍵(也不是指針)

對(duì)于InnoDB表搓劫,這里的啟示是:

(1)不建議使用較長(zhǎng)的列做主鍵瞧哟,例如char(64),因?yàn)樗械钠胀ㄋ饕紩?huì)存儲(chǔ)主鍵枪向,會(huì)導(dǎo)致普通索引過于龐大勤揩;

(2)建議使用趨勢(shì)遞增的key做主鍵,由于數(shù)據(jù)行與索引一體秘蛔,這樣不至于插入記錄時(shí)陨亡,有大量索引分裂傍衡,行記錄移動(dòng);

仍是上面的例子负蠕,只是存儲(chǔ)引擎換成InnoDB:

t(id PK, name KEY, sex, flag);

表中還是四條記錄:

1, shenjian, m, A

3, zhangsan, m, A

5, lisi, m, A

9, wangwu, f, B


其B+樹索引構(gòu)造如上圖:

1.id為PK权纤,行記錄和id索引樹存儲(chǔ)在一起

2.name為KEY构资,有一棵name的索引樹乾闰,葉子存儲(chǔ)id

當(dāng):select * from t where name=‘lisi’;


會(huì)先通過name輔助索引定位到B+樹的葉子節(jié)點(diǎn)得到id=5速客,再通過聚集索引定位到行記錄。

畫外音:所以欲账,其實(shí)掃了2遍索引樹屡江。

三,總結(jié)

1 MyISAM和InnoDB都使用B+樹來實(shí)現(xiàn)索引:

2 MyISAM的索引與數(shù)據(jù)分開存儲(chǔ)

3 MyISAM的索引葉子存儲(chǔ)指針赛不,主鍵索引與普通索引無太大區(qū)別

4 InnoDB的聚集索引和數(shù)據(jù)行統(tǒng)一存儲(chǔ)

5 InnoDB的聚集索引存儲(chǔ)數(shù)據(jù)行本身盼理,普通索引存儲(chǔ)主鍵

6 InnoDB一定有且只有一個(gè)聚集索引

7 InnoDB建議使用趨勢(shì)遞增整數(shù)作為PK,而不宜使用較長(zhǎng)的列作為PK

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俄删,一起剝皮案震驚了整個(gè)濱河市宏怔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畴椰,老刑警劉巖臊诊,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斜脂,居然都是意外死亡抓艳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門帚戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玷或,“玉大人,你說我怎么就攤上這事片任∑眩” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵对供,是天一觀的道長(zhǎng)位他。 經(jīng)常有香客問我,道長(zhǎng)产场,這世上最難降的妖魔是什么鹅髓? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮京景,結(jié)果婚禮上窿冯,老公的妹妹穿的比我還像新娘。我一直安慰自己确徙,他們只是感情好醒串,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布执桌。 她就那樣靜靜地躺著,像睡著了一般厦凤。 火紅的嫁衣襯著肌膚如雪鼻吮。 梳的紋絲不亂的頭發(fā)上育苟,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天较鼓,我揣著相機(jī)與錄音,去河邊找鬼违柏。 笑死博烂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漱竖。 我是一名探鬼主播禽篱,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馍惹!你這毒婦竟也來了躺率?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤万矾,失蹤者是張志新(化名)和其女友劉穎悼吱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體良狈,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡后添,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薪丁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遇西。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖严嗜,靈堂內(nèi)的尸體忽然破棺而出粱檀,到底是詐尸還是另有隱情,我是刑警寧澤漫玄,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布梧税,位于F島的核電站,受9級(jí)特大地震影響称近,放射性物質(zhì)發(fā)生泄漏第队。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一刨秆、第九天 我趴在偏房一處隱蔽的房頂上張望凳谦。 院中可真熱鬧,春花似錦衡未、人聲如沸尸执。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽如失。三九已至绊诲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褪贵,已是汗流浹背掂之。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脆丁,地道東北人世舰。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像槽卫,于是被迫代替她去往敵國(guó)和親跟压。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • 聚簇索引并不是一種單獨(dú)的索引類型歼培,而是一種數(shù)據(jù)存儲(chǔ)方式震蒋。比如,InnoDB的聚簇索引使用B+Tree的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)...
    大頭8086閱讀 17,468評(píng)論 7 40
  • 作者: 58沈劍 [架構(gòu)師之路]《數(shù)據(jù)庫索引躲庄,到底是什么做的查剖?》介紹了B+樹,它是一種非常適合用來做數(shù)據(jù)庫索引的數(shù)...
    weylau閱讀 258評(píng)論 1 0
  • 索引 數(shù)據(jù)庫中的查詢操作非常普遍,索引就是提升查找速度的一種手段 索引的類型 從數(shù)據(jù)結(jié)構(gòu)角度分 1.B+索引:傳統(tǒng)...
    一凡呀閱讀 2,882評(píng)論 0 8
  • 聚簇索引并不是一種單獨(dú)的索引類型效览,而是一種數(shù)據(jù)存儲(chǔ)方式无切。比如,InnoDB的聚簇索引使用B+Tree的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)...
    sherlock_6981閱讀 1,859評(píng)論 0 2
  • 其實(shí) 若尋到又如何
    江少城閱讀 133評(píng)論 0 1