MyISAM和InnoDB兩種引擎主要區別

MyISAM

MyISAM引擎是MySQL 5.1及之前版本的默認引擎,它的特點是:

  • 不支持行鎖,讀取時對需要讀到的所有表加鎖,寫入時則對錶加排它鎖
  • 不支持事務
  • 不支持外鍵
  • 不支持崩潰後的安全恢復
  • 在表有讀取查詢的同時,支持往表中插入新紀錄
  • 支持BLOBTEXT的前500個字符索引,支持全文索引
  • 支持延遲更新索引,極大提升寫入性能
  • 對於不會進行修改的表,支持壓縮表,極大減少磁盤空間佔用

InnoDB

InnoDB在MySQL 5.5後成爲默認索引,它的特點是:

  • 支持行鎖,採用MVCC來支持高併發
  • 支持事務
  • 支持外鍵
  • 支持崩潰後的安全恢復
  • 不支持全文索引

總體來講,MyISAM適合SELECT密集型的表,而InnoDB適合INSERTUPDATE密集型的表

 

 

衆多資料中都說innodb使用的是行級鎖,但實際上是有限制的。只有在你增刪改查時匹配的條件字段帶有索引時,innodb纔會使用行級鎖,在你增刪改查時匹配的條件字段不帶有索引時,innodb使用的將是表級鎖。因爲當你匹配條件字段不帶有所引時,數據庫會全表查詢,所以這需要將整張表加鎖,才能保證查詢匹配的正確性。在生產環境中我們往往需要滿足多人同時對一張表進行增刪改查,所以就需要使用行級鎖,所以這個時候一定要記住爲匹配條件字段加索引。

提到行級鎖和表級鎖時我們就很容易聯想到讀鎖和寫鎖,因爲只有觸發了讀寫鎖,我們纔會談是進行行級鎖定還是進行表級鎖定。那麼什麼時候觸發讀鎖,就是在你用select 命令時觸發讀鎖,什麼時候觸發寫鎖,就是在你使用update,delete,insert時觸發寫鎖,並且使用rollback或commit後解除本次鎖定。

爲了幫助大家更好的區分讀寫鎖和(表級鎖行級鎖),我將讀寫鎖叫做權限鎖(決定了加鎖後用戶有哪些操作權限),將表級鎖行級鎖叫做對象索(決定將鎖加在某一行還是整張表)。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章