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

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

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