InnoDB與MyISAM存儲(chǔ)引擎對(duì)比
InnoDB支持事務(wù)滓技、外鍵务荆、行鎖;支持非鎖定讀,即默認(rèn)讀取操作不會(huì)產(chǎn)生鎖。
InnoDB通過使用多版本并發(fā)控制(MVCC)來獲得高并發(fā)性道偷,提供了插入緩沖,二次寫记劈,自適應(yīng)哈希索引勺鸦,預(yù)讀等高性能和高可用的功能。
對(duì)于表中數(shù)據(jù)的存儲(chǔ)目木,InnoDB存儲(chǔ)引擎采用了聚集的方式换途,因此每張表數(shù)據(jù)的存儲(chǔ)都是按照主鍵的順序進(jìn)行存放。
MyISAM不支持事務(wù)、表鎖設(shè)計(jì)军拟。
MyISAM相對(duì)簡單剃执,所以在效率上要優(yōu)于InnoDB,小型應(yīng)用可以考慮使用MyISAM吻谋。當(dāng)你的數(shù)據(jù)庫有大量的寫入忠蝗、更新操作而查詢比較少或者數(shù)據(jù)完整性要求比較高的時(shí)候就選擇InnoDB表现横。當(dāng)你的數(shù)據(jù)庫主要以查詢?yōu)橹骼焓埃啾容^而言更新和寫 入比較少,并且業(yè)務(wù)方面數(shù)據(jù)完整性要求不那么嚴(yán)格戒祠,就選擇MyISAM表骇两。
InnoDB存儲(chǔ)引擎概述
在數(shù)據(jù)庫系統(tǒng)中,由于CPU速度與磁盤速度之間的鴻溝姜盈,基于磁盤的數(shù)據(jù)庫系統(tǒng)通常使用緩沖池技術(shù)來提高數(shù)據(jù)庫的整體性能低千。
為了避免發(fā)生數(shù)據(jù)丟失的問題,當(dāng)前事務(wù)數(shù)據(jù)庫系統(tǒng)普遍都采用了Write Ahead Log策略馏颂,即當(dāng)事務(wù)提交時(shí)示血,先寫重做日志,再修改頁救拉。當(dāng)由于宕機(jī)而導(dǎo)致數(shù)據(jù)丟失時(shí)难审,通過重做日志來完成數(shù)據(jù)的恢復(fù)。這也是事務(wù)ACID中D(Durability 持久性)的要求亿絮。
每個(gè)InnoDB存儲(chǔ)引擎至少有一個(gè)重做日志文件組告喊,每個(gè)文件組下至少有2個(gè)重做日志文件,如默認(rèn)的ib_logfile0派昧、ib_logfile1黔姜。InnoDB存儲(chǔ)引擎先寫重做日志文件1,當(dāng)達(dá)到文件的最后時(shí)蒂萎,會(huì)切換至重做日志文件2秆吵,當(dāng)重做日志文件2也被寫滿時(shí),會(huì)再被切換到重做日志文件1中五慈。