天天看點

InnoDB與MyISAM

InnoDB與MyISAM

Mysql在5.5之前預設使用MyISAM存儲引擎,之後使用InnoDB。檢視目前存儲引擎:

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

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

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

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

InnoDB支援外鍵,而MyISAM不支援。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;

注意

如有錯誤請多指教。

繼續閱讀