innodb 與 myisam 索引的區(qū)別


一 MyISAM索引實現(xiàn)

1. 主鍵索引

MyISAM使用B+樹作為索引結(jié)構(gòu),葉節(jié)點data存放的是數(shù)據(jù)記錄的地址义起。下圖為MyISAM表的主索引师崎,Col1為主鍵。


2. 輔助索引(二級索引)

輔助索引跟主鍵索引在結(jié)構(gòu)上沒有任何區(qū)別齐蔽,只是主鍵索引的key要求是唯一的床估,輔助索引的key可以重復(fù)。上圖為Col2創(chuàng)建一個輔助索引谈况,也是一顆B+ Tree递胧,data域保存數(shù)據(jù)域的值為地址,讀取相應(yīng)的數(shù)據(jù)記錄缎脾。

MyISAM的索引結(jié)構(gòu)叫非聚簇索引,為了區(qū)別于InnoDB的聚簇索引联喘。


二 InnoDB索引實現(xiàn)

1 主鍵索引

主鍵索引也是B+樹結(jié)構(gòu),實現(xiàn)方式卻完全不同豁遭。InnoDB表數(shù)據(jù)文件本身就是一個索引結(jié)構(gòu),樹的葉節(jié)點存放了完整的數(shù)據(jù)記錄堤框,這種索引結(jié)構(gòu)叫聚簇索引。

?因為InnoDB的數(shù)據(jù)文件本身要按主鍵聚集启绰,所以InnoDB要求表必須有主鍵(MyISAM可以沒有)沟使,如果沒有顯式指定,則mysql會自動選擇一個可以唯一標識數(shù)據(jù)記錄的列作為主鍵着倾。如果不存在這種列,則mysql自動為InnoDB表生成一個隱含字段作為主鍵卡者,這個字段長度為6個字節(jié)客们,類型為長整型。

2 輔助索引

??InnoDB的所有輔助索引都引用主鍵作為data域底挫。下圖為定義在Col3上的一個輔助索引。

因此InnoDB 的索引能提供一種非秤澹快速的主鍵查找性能官边。不過,它的輔助索引也會包含主鍵列罐氨,所以如果主鍵定義的比較大,其他索引也將很大栅隐。InnoDB 不會壓縮索引。

聚集索引這種實現(xiàn)方式使得按主鍵的搜索十分高效谨究,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵泣棋,然后用主鍵到主索引中檢索獲得記錄。

不同存儲引擎的索引實現(xiàn)方式對于正確使用和優(yōu)化索引都非常有幫助潭辈,例如知道了InnoDB的索引實現(xiàn)后,就很容易明白為什么不建議使用過長的字段作為主鍵寄摆,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如柏副,用非單調(diào)的字段作為主鍵在InnoDB中不是個好主意,因為InnoDB數(shù)據(jù)文件本身是一顆B+Tree眷篇,非單調(diào)的主鍵會造成在插入新記錄時數(shù)據(jù)文件為了維持B+Tree的特性而頻繁的分裂調(diào)整荔泳,十分低效,而使用自增字段作為主鍵則是一個很好的選擇换可。


三?InnoDB索引MyISAM索引的區(qū)別

1 存儲結(jié)構(gòu)(主索引/輔助索引)

InnoDB的數(shù)據(jù)文件本身就是主索引文件沾鳄。而MyISAM的主索引和數(shù)據(jù)是分開的。

InnoDB的輔助索引data域存儲相應(yīng)記錄主鍵的值而不是地址译荞。而MyISAM的輔助索引和主索引沒有多大區(qū)別休弃。

innoDB是聚簇索引,數(shù)據(jù)掛在逐漸索引之下塔猾。

2 鎖

MyISAM使用的是表鎖

InnoDB使用行鎖

3 事務(wù)

MyISAM沒有事務(wù)支持和MVCC

InnoDB支持事務(wù)和MVCC

4 全文索引

MyISAM支持FULLTEXT類型的全文索引

InnoDB不支持FULLTEXT類型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好

5 主鍵

MyISAM允許沒有任何索引和主鍵的表存在得湘,索引都是保存行的地址

InnoDB如果沒有設(shè)定主鍵或非空唯一索引淘正,就會自動生成一個6字節(jié)的主鍵鸿吆,數(shù)據(jù)是主索引的一部分伞剑,附加索引保存的是主索引的值

6 外鍵

?MyISAM不支持

InnoDB支持

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恕刘,一起剝皮案震驚了整個濱河市褐着,隨后出現(xiàn)的幾起案子托呕,更是在濱河造成了極大的恐慌馅扣,老刑警劉巖差油,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異交掏,居然都是意外死亡盅弛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來张吉,“玉大人齿梁,你說我怎么就攤上這事∈『耍” “怎么了昆码?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脓匿。 經(jīng)常有香客問我陪毡,道長,這世上最難降的妖魔是什么铁瞒? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮虱歪,結(jié)果婚禮上笋鄙,老公的妹妹穿的比我還像新娘萧落。我一直安慰自己,他們只是感情好陨倡,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布兴革。 她就那樣靜靜地躺著,像睡著了一般袁余。 火紅的嫁衣襯著肌膚如雪颖榜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音怪与,去河邊找鬼。 笑死,一個胖子當著我的面吹牛存淫,可吹牛的內(nèi)容都是我干的桅咆。 我是一名探鬼主播岩饼,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼版述,長吁一口氣:“原來是場噩夢啊……” “哼寞冯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起咆疗,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤午磁,失蹤者是張志新(化名)和其女友劉穎毡们,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喧半,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年扁耐,在試婚紗的時候發(fā)現(xiàn)自己被綠了婉称。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王暗。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藻烤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涎显,我是刑警寧澤期吓,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布膘婶,位于F島的核電站悬襟,受9級特大地震影響脊岳,放射性物質(zhì)發(fā)生泄漏垛玻。R本人自食惡果不足惜帚桩,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一账嚎、第九天 我趴在偏房一處隱蔽的房頂上張望郭蕉。 院中可真熱鬧召锈,春花似錦、人聲如沸拐袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畜疾。三九已至,卻和暖如春姥敛,著一層夾襖步出監(jiān)牢的瞬間瞎暑,已是汗流浹背与帆。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阵翎,地道東北人之剧。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓贰军,卻偏偏與公主長得像蟹肘,于是被迫代替她去往敵國和親疆前。 傳聞我的和親對象是個殘疾皇子竹椒,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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