InnoDB與MyISAM

InnoDB與MyISAM


Mysql在5.5之前默認使用MyISAM存儲引擎,之後使用InnoDB。查看當前存儲引擎:

show variables like '%storage_engine%';

MyISAM操作數據都是使用的表鎖,更行一條記錄就要鎖整個表,導致性能較低,併發不高。當然同時它也不會存在死鎖的問題。

而InnoDB與MyISAM的最大不同有兩點:一是2InnoDB支持事務;二是InnoDB採用了行級鎖。也就是你需要修改哪行,就可以只鎖定哪行。

在MySQL中,行級鎖並不是直接鎖記錄,而是鎖索引。索引分爲主鍵索引和非主鍵索引兩種,如果一條sql語句操作了主鍵索引,MySQL就會鎖定這條主鍵索引;如果一條語句操作的了非主鍵索引,MySQL會先鎖定該非主鍵索引,再鎖定相關的主鍵索引。

InnoDB行鎖是通過給索引項加鎖實現的,如果沒有索引,InnoDB會通過隱藏的聚簇索引來對記錄加鎖。也就是說:如果不通過索引條件檢索數據,那麼InnoDB將對錶中所有數據加鎖,實際效果跟表鎖一樣。因爲沒有了索引,找到某一條記錄就得掃描全表,要掃描全表,就得鎖定表。

InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB錶轉爲MYISAM會失敗;

注意
如有錯誤請多指教。

發佈了12 篇原創文章 · 獲贊 1 · 訪問量 7126
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章