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ù)日志進(jìn)行數(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)保存好的值而不需要進(jìn)行全表掃描。
MyISAM引擎適用場景
1.不需要事務(wù)的操作;
2.插入、更新少,讀取頻繁;
3.頻繁的統(tǒng)計計算。