MySQL中存儲(chǔ)引擎InnoDB與MyISAM的詳解

1.innodb存儲(chǔ)引擎

? ?mysql5.5中InnoDB成為默認(rèn)的存儲(chǔ)引擎InnoDB是事務(wù)型存儲(chǔ)引擎,被設(shè)計(jì)用來處理大量的短期事務(wù)。它的性能和自動(dòng)崩潰恢復(fù)特性,使得它在非事務(wù)場(chǎng)景中也很流行。

? ?所以可以這么說:“除非需要用到某些InnoDB不具備的特性,并且沒有其他辦法可以替代,否則都應(yīng)該優(yōu)先選擇它”。

??InnoDB的數(shù)據(jù)存儲(chǔ)在表空間中,它可以將每個(gè)表的數(shù)據(jù)和索引存放在單獨(dú)文件中。

??InnoDB采用MVCC來支持高并發(fā),并且實(shí)現(xiàn)了四個(gè)標(biāo)準(zhǔn)的隔離級(jí)別。默認(rèn)級(jí)別是REPEATABLE READ(可重復(fù)讀),并且通過間隙鎖策略防止幻讀的出現(xiàn)。

? InnoDB表示基于聚簇索引建立的,聚簇索引對(duì)主鍵的查詢有很高的性能。

? InnoDB支持真正的熱備份,可以通過XtraBackup工具實(shí)現(xiàn)。

? InnoDB內(nèi)部做了很多優(yōu)化,包括從磁盤讀取數(shù)據(jù)時(shí)采用的可預(yù)測(cè)性預(yù)讀,能夠自動(dòng)在內(nèi)存中創(chuàng)建hash索引,能夠加速插入操作的插入緩沖區(qū)等。

? 應(yīng)用場(chǎng)景

? ? ? ? ? ? ? ? ?需要在線熱備份

     ? 數(shù)據(jù)量大,需要系統(tǒng)崩潰后快速恢復(fù)。比如訂單處理。

2.MyISAM存儲(chǔ)引擎

MySQL5.1之前,MyISAM為默認(rèn)的存儲(chǔ)引擎。MyISAM不支持事務(wù)和行級(jí)鎖且最大缺陷就是崩潰后無法安全恢復(fù)。

.MyISAM將表存儲(chǔ)在兩個(gè)文件中:數(shù)據(jù)文件和索引文件。

?MyISAM對(duì)整張表加鎖,讀取時(shí)對(duì)需要的所有表加共享鎖,寫入時(shí)加排它鎖。但是在表有讀取查詢時(shí),也可以往表中插入新的記錄(并發(fā)插入)

?MyISAM可以手工或者自動(dòng)執(zhí)行檢查修復(fù)操作,但是可能導(dǎo)致數(shù)據(jù)丟失而且修復(fù)操作非常慢。

?MyISAM表中BLOB和TEXT等長(zhǎng)字段也可以基于前500個(gè)字符創(chuàng)建索引。MyISAM也支持全文索引,這是基于分詞創(chuàng)建的索引,可以支持復(fù)雜的查詢。

?MyISAM在創(chuàng)建表時(shí)候如果指定DELAY_KEY_WRITE(延遲更新索引鍵),在每次修改執(zhí)行完成時(shí)會(huì)將索引寫入內(nèi)存中的鍵緩沖區(qū),擋在清理鍵緩沖區(qū)或者關(guān)閉表時(shí)才會(huì)將對(duì)應(yīng)索 ?引塊寫入磁盤,這種方式可以極大提升寫入性能。但是在數(shù)據(jù)庫或主機(jī)崩潰時(shí)索引會(huì)損壞。

?應(yīng)用場(chǎng)景

? ? ? ? ? ? ?主要是SELECT和INSERT操作的場(chǎng)景,比如一般日志型的應(yīng)用。

? ? ? ? ? ?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享