企業(yè)怎么建設網(wǎng)站萬網(wǎng)官網(wǎng)首頁
“請簡要說明 Mysql 中 MyISAM 和 InnoDB 引擎的區(qū)別”。
屏幕前有多少同學在面試過程與遇到過類似問題, 可以在評論區(qū)留言:遇到過。
考察目的
對于 xxxx 技術的區(qū)別,在面試中是很常見的一個問題
一般情況下,面試官會通過這類問題來熱場,打開接下來溝通的話題,
然后沿著你回答的內容層層遞進去做更深入的了解。
當然,另外一個更加深層次的原因,就是考察求職者對于這兩個技術的理解層次。
因為能夠通過自己的理解總結出他們的區(qū)別,至少說明你是有比較深入的研究的。
這個問題考察難度算是比較大的,一般面向 3 年以上開發(fā)經(jīng)驗的同學。
問題解析
MyISAM 和 InnoDB 都是 Mysql 里面的兩個存儲引擎。
在 Mysql 里面,存儲引擎是可以自己擴展的,它的本質其實是定義數(shù)據(jù)存儲的方式
以及數(shù)據(jù)讀取的實現(xiàn)邏輯。 而不同存儲引擎本身的特性,使得我們可以針對性的選擇合適的引擎來實現(xiàn)不同的業(yè)務
場景。
從而獲得更好的性能。
在 Mysql 5.5 之前,默認的存儲引擎是 MyISAM,從 5.5 以后,InnoDB 就作為了默認
的存儲引擎。
在實際應用開發(fā)中,我們基本上都是采用 InnoDB 引擎。
我們先來看一下 MyISAM 引擎。
MyISAM 引擎的數(shù)據(jù)是通過二進制的方式存儲在磁盤上,它在磁盤上體現(xiàn)為兩個文件
? 一個是.MYD 文件,D 代表 Data,是 MyISAM 的數(shù)據(jù)文件,存放數(shù)據(jù)記錄,
? 一個是.MYI 文件,I 代表 Index,是 MyISAM 的索引文件,存放索引
實現(xiàn)機制如圖所示(如圖)。
因為索引和數(shù)據(jù)是分離的,所以在進行查找的時候,先從索引文件中找到數(shù)據(jù)的磁盤位
置,再到數(shù)據(jù)文件
中找到索引對應的數(shù)據(jù)內容。

在 InnoDB 存儲引擎中,數(shù)據(jù)同樣存儲在磁盤上,它在磁盤上只有一個 ibd 文件,里
面包含索引和數(shù)據(jù)。
(如圖),它的整體結構如圖所示,在 B+樹的葉子節(jié)點里面存儲了索引對應的數(shù)據(jù),
在通過索引進行檢索的時候,命中葉子節(jié)點,就可以直接從葉子節(jié)點中取出行數(shù)據(jù)。

了解了這兩個存儲引擎以后,我們在面試的時候該怎么回答呢?
高手回答
好的。
基于我的理解,我認為 MyISAm 和 InnoDB 的區(qū)別有 4 個,
? 第一個,數(shù)據(jù)存儲的方式不同,MyISAM 中的數(shù)據(jù)和索引是分開存儲的,
而 InnoDB 是把索引和數(shù)據(jù)存儲在同一個文件里面。
? 第二個,對于事務的支持不同,MyISAM 不支持事務,而 InnoDB 支持 ACID 特性
的事務處理
? 第三個,對于鎖的支持不同,MyISAM 只支持表鎖,而 InnoDB 可以根據(jù)不同的
情況,支持行鎖,表鎖,間隙鎖,臨鍵鎖
? 第四個,MyISAM 不支持外鍵,InnoDB 支持外鍵
因此基于這些特性,我們在實際應用中,可以根據(jù)不同的場景來選擇合適的存儲引擎。
比如如果需要支持事務,那必須要選擇 InnoDB。
如果大部分的表操作都是查詢,可以選擇 MyISAM。
以上就是我的理解。
總結
下次面試的時候遇到這個問題,大家知道怎么回答了嗎?
如果你喜歡我的作品,記得點贊收藏加關注哦
本文摘自mic老師文檔