MySQL 有多種存儲引擎,目前常用的是 MyISAM 和 InnoDB 這兩個引擎沸伏,除了這兩個引擎以為還有許多其他引擎须尚,有官方的,也有一些公司自己研發(fā)的假消。這篇文章主要簡單概述一下常用常見的 MySQL 引擎柠并,一則這是面試中常被問到的問題,二則這也是數(shù)據(jù)庫設(shè)計中不可忽略的問題富拗,用合適的引擎可以更好的適應(yīng)業(yè)務(wù)場景臼予,提高業(yè)務(wù)效率。
InnoDB引擎
InnoDB是一個事務(wù)型的存儲引擎啃沪,支持回滾粘拾,設(shè)計目標(biāo)是處理大數(shù)量數(shù)據(jù)時提供高性能的服務(wù),它在運行時會在內(nèi)存中建立緩沖池创千,用于緩沖數(shù)據(jù)和索引缰雇。
InnoDB引擎優(yōu)點
1.支持事務(wù)處理、ACID事務(wù)特性签餐;
2.實現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級別寓涨;
3.支持行級鎖和外鍵約束;
4.可以利用事務(wù)日志進行數(shù)據(jù)恢復(fù)氯檐。
5.鎖級別為行鎖,行鎖優(yōu)點是適用于高并發(fā)的頻繁表修改体捏,高并發(fā)是性能優(yōu)于 MyISAM冠摄。缺點是系統(tǒng)消耗較大糯崎。
6.索引不僅緩存自身,也緩存數(shù)據(jù)河泳,相比 MyISAM 需要更大的內(nèi)存沃呢。
InnoDB引擎缺點
不支持FULLTEXT類型的索引,因為它沒有保存表的行數(shù)拆挥,當(dāng)使用COUNT統(tǒng)計時會掃描全表薄霜。
InnoDB引擎適用場景
1.需要事務(wù)的操作;
2.更新數(shù)據(jù)需要使用行級鎖纸兔;
3.大數(shù)據(jù)量讀寫惰瓜;
4.大型互聯(lián)網(wǎng)應(yīng)用。
MyISAM引擎
MyISAM 是 MySQL 5.5.5 之前的默認(rèn)引擎汉矿,它的設(shè)計目標(biāo)是快速讀取崎坊。
MyISAM引擎優(yōu)點
1.高性能讀取洲拇;
2.因為它保存了表的行數(shù)奈揍,當(dāng)使用COUNT統(tǒng)計時不會掃描全表;
MyISAM引擎缺點
1.鎖級別為表鎖赋续,表鎖優(yōu)點是開銷小男翰,加鎖快;缺點是鎖粒度大纽乱,發(fā)生鎖沖動概率較高蛾绎,容納并發(fā)能力低,這個引擎適合查詢?yōu)橹鞯臉I(yè)務(wù)迫淹。
2.此引擎不支持事務(wù)秘通,也不支持外鍵。
3.INSERT和UPDATE操作需要鎖定整個表敛熬;
4.它存儲表的行數(shù)肺稀,于是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進行全表掃描。
MyISAM引擎適用場景
1.不需要事務(wù)的操作应民;
2.插入话原、更新少,讀取頻繁诲锹;
3.頻繁的統(tǒng)計計算繁仁。