摘要:雖然性能極佳,而且提供了大量的特性,包括全文索引壓縮空間函數(shù)等,但不支持事務(wù)和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復。
Java面試通關(guān)手冊(Java學習指南,歡迎Star,會一直完善下去,歡迎建議和指導):https://github.com/Snailclimb/Java_Guide
一 MyISAM 1.1 MyISAM簡介MyISAM是MySQL的默認數(shù)據(jù)庫引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,而且提供了大量的特性,包括全文索引、壓縮、空間函數(shù)等,但MyISAM不支持事務(wù)和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復。不過,5.5版本之后,MySQL引入了InnoDB(另一種數(shù)據(jù)庫引擎)。
下面這張圖只是想表達的意思是現(xiàn)在大多數(shù)時候我們使用的都是InnoDB存儲引擎,但是在某些情況下使用MyISAM更好,比如:MyISAM更適合讀密集的表,而InnoDB更適合寫密集的的表。 在數(shù)據(jù)庫做主從分離的情況下,經(jīng)常選擇MyISAM作為主庫的存儲引擎。
不支持行鎖(MyISAM只有表鎖),讀取時對需要讀到的所有表加鎖,寫入時則對表加排他鎖;
不支持事務(wù)
不支持外鍵
不支持崩潰后的安全恢復
在表有讀取查詢的同時,支持往表中插入新紀錄
支持BLOB和TEXT的前500個字符索引,支持全文索引
支持延遲更新索引,極大地提升了寫入性能
對于不會進行修改的表,支持 壓縮表 ,極大地減少了磁盤空間的占用
補充概念:
Mysql的行鎖和表鎖( 鎖是計算機協(xié)調(diào)多個進程或純線程并發(fā)訪問某一資源的機制)二 InnoDB 2.1 MyISAM簡介
表級鎖: 每次操作鎖住整張表。開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低;
行級鎖: 每次操作鎖住一行數(shù)據(jù)。開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高;
InnoDB是MySQL的默認數(shù)據(jù)庫引擎(5.5版之后),2006年五月時由甲骨文公司并購。與傳統(tǒng)的ISAM與MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事務(wù)(Transaction)功能。
2.2 MyISAM特點支持行鎖,采用MVCC來支持高并發(fā),有可能死鎖
支持事務(wù)
支持外鍵
支持崩潰后的安全恢復
不支持全文索引
三 關(guān)于二者的對比與總結(jié) 3.1 二者的常見對比1) count運算上的區(qū)別: 因為MyISAM緩存有表meta-data(行數(shù)等),因此在做COUNT(*)時對于一個結(jié)構(gòu)很好的查詢是不需要消耗多少資源的。而對于InnoDB來說,則沒有這種緩存。
2) 是否支持事務(wù)和崩潰后的安全恢復: MyISAM 強調(diào)的是性能,每次查詢具有原子性,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持。但是InnoDB 提供事務(wù)支持事務(wù),外部鍵等高級數(shù)據(jù)庫功能。 具有事務(wù)(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。
3)是否支持外鍵: MyISAM不支持,而InnoDB支持。
3.2 總結(jié)MyISAM更適合讀密集的表,而InnoDB更適合寫密集的的表。 在數(shù)據(jù)庫做主從分離的情況下,經(jīng)常選擇MyISAM作為主庫的存儲引擎。
一般來說,如果需要事務(wù)支持,并且有較高的并發(fā)讀取頻率(MyISAM的表鎖的粒度太大,所以當該表寫并發(fā)量較高時,要等待的查詢就會很多了),InnoDB是不錯的選擇。如果你的數(shù)據(jù)量很大(MyISAM支持壓縮特性可以減少磁盤的空間占用),而且不需要支持事務(wù)時,MyISAM是最好的選擇。
歡迎關(guān)注我的微信公眾號:"Java面試通關(guān)手冊"(一個有溫度的微信公眾號,無廣告,單純技術(shù)分享,期待與你共同進步~~~堅持原創(chuàng),分享美文,分享各種Java學習資源)
最后,就是使用阿里云服務(wù)器一段時間后,感覺阿里云真的很不錯,就申請做了阿里云大使,然后這是我的優(yōu)惠券地址.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69666.html
摘要:雖然性能極佳,而且提供了大量的特性,包括全文索引壓縮空間函數(shù)等,但不支持事務(wù)和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復。 一 MyISAM 1.1 MyISAM簡介 MyISAM是MySQL的默認數(shù)據(jù)庫引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,而且提供了大量的特性,包括全...
摘要:串行最高的隔離級別,完全服從的隔離級別。但是這將嚴重影響程序的性能。此外,垂直分區(qū)可以簡化表的結(jié)構(gòu),易于維護。 我自己總結(jié)的Java學習的一些知識點以及面試問題,目前已經(jīng)開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snailclimb/Java_Guide 書籍推薦 《高性能MySQL : 第3版》 文字教程推薦 MySQL 教程(菜鳥教程...
摘要:串行最高的隔離級別,完全服從的隔離級別。但是這將嚴重影響程序的性能。此外,垂直分區(qū)可以簡化表的結(jié)構(gòu),易于維護。 我自己總結(jié)的Java學習的一些知識點以及面試問題,目前已經(jīng)開源,會一直完善下去,歡迎建議和指導歡迎Star: https://github.com/Snailclimb/Java_Guide 書籍推薦 《高性能MySQL : 第3版》 文字教程推薦 MySQL 教程(菜鳥教程...
閱讀 2224·2019-08-30 15:54
閱讀 1960·2019-08-30 13:49
閱讀 679·2019-08-29 18:44
閱讀 834·2019-08-29 18:39
閱讀 1117·2019-08-29 15:40
閱讀 1538·2019-08-29 12:56
閱讀 3151·2019-08-26 11:39
閱讀 3104·2019-08-26 11:37