綜述
在MySQL中,InnoDB和MyISAM應該是最廣為人知的2種存儲引擎著洼。
對二者的特點做一個簡單的整理。
InnoDB
現(xiàn)階段MySQL默認的存儲引擎。
-
采用MVCC來支持高并發(fā)
Multi-Version Concurrency Control 多版本并發(fā)控制疫蔓。
MVCC會保存某個時間點上的數(shù)據(jù)快照。這意味著事務可以看到一個一致的數(shù)據(jù)視圖身冬,不管他們需要跑多久衅胀。這同時也意味著不同的事務在同一個時間點看到的同一個表的數(shù)據(jù)可能是不同的。 實現(xiàn)了四個標準的隔離級別
-
通過間隙鎖防止幻讀
不僅鎖定涉及的行酥筝,還會對索引中的間隙進行鎖定滚躯。
基于聚集索引建立表 ,二級索引必須包含主鍵列
-
文件結(jié)構(gòu)
文件名 描述 .frm 記錄表結(jié)構(gòu)的文件 .idb 索引+數(shù)據(jù):
按照B+樹索引組織文件嘿歌,且數(shù)據(jù)保存在B+樹的葉子節(jié)點中 必須有主鍵掸掏,沒有的話會自動生成,且建議使用自增整型:
整型:占用內(nèi)存小宙帝、比較速度快
自增:有序丧凤,能降低B+樹內(nèi)部調(diào)整的次數(shù),提高效率
(新節(jié)點序號一定比老節(jié)點大步脓,就不會插入到已存在的節(jié)點之間)
MyISAM
5.1版本以前默認的引擎愿待,逐漸被
InnoDB
取代不支持并發(fā)和行級鎖
-
對整張表加鎖:
鎖類型 描述 讀取 共享鎖
支持并發(fā)插入(在讀取的時候可以往表中插入數(shù)據(jù))寫入 排它鎖 -
文件結(jié)構(gòu)
文件名 描述 .frm 記錄表結(jié)構(gòu)的文件 .MYD 數(shù)據(jù)文件 .MYI 索引文件
在B+樹的葉子節(jié)點通過指針指向.MYD
文件中的數(shù)據(jù)