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