mysql有多種存儲引擎,目前常用的是 MyISAM 和 InnoDB 這兩個引擎,除了這兩個引擎以為還有許多其他引擎,有官方的,也有一些公司自己研發(fā)的。這篇文章主要簡單概述一下常用常見的 MySQL 引擎,一則這是面試中常被問到的問題,二則這也是數(shù)據(jù)庫設(shè)計中不可忽略的問題,用合適的引擎可以更好的適應(yīng)業(yè)務(wù)場景,提高業(yè)務(wù)效率。 MyISAM#MyISAM 是 mysql 5.5.5 之前的默認引擎,它支持 B-tree/FullText/R-tree 索引類型。 鎖級別為表鎖,表鎖優(yōu)點是開銷小,加鎖快;缺點是鎖粒度大,發(fā)生鎖沖動概率較高,容納并發(fā)能力低,這個引擎適合查詢?yōu)橹鞯臉I(yè)務(wù)。 此引擎不支持事務(wù),也不支持外鍵。 MyISAM強調(diào)了快速讀取操作。它存儲表的行數(shù),于是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進行全表掃描。 InnoDB#InnoDB 存儲引擎最大的亮點就是支持事務(wù),支持回滾,它支持 Hash/B-tree 索引類型。 鎖級別為行鎖,行鎖優(yōu)點是適用于高并發(fā)的頻繁表修改,高并發(fā)是性能優(yōu)于 MyISAM。缺點是系統(tǒng)消耗較大,索引不僅緩存自身,也緩存數(shù)據(jù),相比 MyISAM 需要更大的內(nèi)存。 InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行 select count(*) from table時,InnoDB 要掃描一遍整個表來計算有多少行。 支持事務(wù),支持外鍵。 ACID 事務(wù)#A 事務(wù)的原子性(Atomicity):指一個事務(wù)要么全部執(zhí)行,要么不執(zhí)行。也就是說一個事務(wù)不可能只執(zhí)行了一半就停止了。比如你從取款機取錢,這個事務(wù)可以分成兩個步驟:1)劃卡,2)出錢。不可能劃了卡,而錢卻沒出來,這兩步必須同時完成,要么就不完成。 Memory#Memory 是內(nèi)存級別存儲引擎,數(shù)據(jù)存儲在內(nèi)存中,所以他能夠存儲的數(shù)據(jù)量較小。 因為內(nèi)存的特性,存儲引擎對數(shù)據(jù)的一致性支持較差。鎖級別為表鎖,不支持事務(wù)。但訪問速度非常快,并且默認使用 hash 索引。 Memory存儲引擎使用存在內(nèi)存中的內(nèi)容來創(chuàng)建表,每個Memory表只實際對應(yīng)一個磁盤文件,在磁盤中表現(xiàn)為.frm文件。 總結(jié)#
互聯(lián)網(wǎng)項目中隨著硬件成本的降低及緩存、中間件的應(yīng)用,一般我們選擇都以 InnoDB 存儲引擎為主,很少再去選擇 MyISAM 了。而業(yè)務(wù)真發(fā)展的一定程度時,自帶的存儲引擎無法滿足時,這時公司應(yīng)該是有實力去自主研發(fā)滿足自己需求的存儲引擎或者購買商用的存儲引擎了。 |
|
來自: caodaoquan > 《地法》