我本身總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: github.com/Snailclimb/…git
MyISAM是MySQL的默認數據庫引擎(5.5版以前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,並且提供了大量的特性,包括全文索引、壓縮、空間函數等,但MyISAM不支持事務和行級鎖,並且最大的缺陷就是崩潰後沒法安全恢復。不過,5.5版本以後,MySQL引入了InnoDB(另外一種數據庫引擎)。github
下面這張圖只是想表達的意思是如今大多數時候咱們使用的都是InnoDB存儲引擎,可是在某些狀況下使用 MyISAM 也是合適的好比讀密集的狀況下。(若是你不介意 MyISAM 崩潰回覆問題的話)。面試
補充概念:sql
Mysql的行鎖和表鎖( 鎖是計算機協調多個進程或純線程併發訪問某一資源的機制) 表級鎖: 每次操做鎖住整張表。開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的機率最高,併發度最低; 行級鎖: 每次操做鎖住一行數據。開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的機率最低,併發度也最高;數據庫
InnoDB是MySQL的默認數據庫引擎(5.5版以後),2006年五月時由甲骨文公司併購。與傳統的ISAM與MyISAM相比,InnoDB的最大特點就是支持了ACID兼容的事務(Transaction)功能。緩存
1) count運算上的區別: 由於MyISAM緩存有表meta-data(行數等),所以在作COUNT(*)時對於一個結構很好的查詢是不須要消耗多少資源的。而對於InnoDB來講,則沒有這種緩存。安全
2) 是否支持事務和崩潰後的安全恢復: MyISAM 強調的是性能,每次查詢具備原子性,其執行數度比InnoDB類型更快,可是不提供事務支持。可是InnoDB 提供事務支持事務,外部鍵等高級數據庫功能。 具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。併發
3)是否支持外鍵: MyISAM不支持,而InnoDB支持。ide
《MySQL高性能》上面有一句話這樣寫到:函數
不要輕易相信「MyISAM比InnoDB快」之類的經驗之談,這個結論每每不是絕對的。在不少咱們已知場景中,InnoDB的速度均可以讓MyISAM可望不可即,尤爲是用到了聚簇索引,或者須要訪問的數據均可以放入內存的應用。
通常狀況下咱們選擇 InnoDB 都是沒有問題的,可是某事狀況下你並不在意可擴展能力和併發能力,也不須要事務支持,也不在意崩潰後的安全恢復問題的話,選擇MyISAM也是一個不錯的選擇。可是通常狀況下,咱們都是須要考慮到這些問題的。
若是你們想要實時關注我更新的文章以及分享的乾貨的話,能夠關注個人公衆號。
《Java面試突擊》: 由本文檔衍生的專爲面試而生的《Java面試突擊》V2.0 PDF 版本公衆號後臺回覆 "Java面試突擊" 便可免費領取!
Java工程師必備學習資源: 一些Java工程師經常使用學習資源公衆號後臺回覆關鍵字 「1」 便可免費無套路獲取。