1. 程式人生 > >MySQL中InnoDB和MyISAM引擎的區別

MySQL中InnoDB和MyISAM引擎的區別

直到MySQL5.5之前,MySQL的預設殷勤都是MyISAM。隨著新版本的釋出,InnoDB成功上位,成為MySQL的預設引擎。這兩種引擎的使用都非常廣泛,那麼它們有什麼區別和聯絡

簡短介紹

  • InnoDB: 預設的事務型引擎,是最重要也是使用最廣泛的儲存引擎。可以用來處理大量的短期事務,具有優秀的效能以及自動崩潰回覆特性。
  • MyISAM: 非事務型引擎,提供了大量的特性,包括全文索引、壓縮、空間函式等。不支援事務以及行級鎖,並且無法在崩潰之後安全恢復。

異同

儲存

  • InnoDB的資料儲存在表空間中,表空間是一個由引擎管理的黑盒子,由一系列的資料檔案組成。在MySQL4.1之後,InnoDB可以將每個表的資料和索引存放在單獨的檔案中。
  • MyISAM會將表儲存在兩個檔案中:資料檔案以及索引檔案,分別以.MYD和.MYI為拓展名。

加鎖與併發

  • InnoDB採用MVCC來支援高併發,並且實現了4個標準的隔離級別。InnoDB鎖的粒度最小為行級鎖。
  • MyISAM只支援對整張表加鎖。

索引

InnoDB和MyISAM引擎採用的都是B+樹作為索引,但是它們的不同點是:

  • MyISAM引擎的索引資料在磁碟上是按照順序儲存的。InnoDB引擎的表資料是隨機分佈的。
  • MyISAM的主鍵索引的葉子節點下只存放資料在磁碟上的指標,其他次級索引也一樣。InnoDB索引的主鍵索引的葉子節點下直接存放資料,其他次級索引的葉子節點指向主鍵ID。

外來鍵

  • InnoDB引擎支援外來鍵的定義。
  • MyISAM殷勤不支援外來鍵的定義。

count(*) 函式的執行

  • 對於InnoDB引擎而言,執行該函式需要掃描表中的所有行。
  • 對於MyISAM引擎而言,執行該函式只需要讀取儲存的元資料。

總結

MyISAM引擎設計簡單,資料以緊密格式儲存,在讀密集環境下的效能較好。如果不需要使用事務操作並且不需要使用InnoDB的一些特性,那麼可以選擇該引擎。

InnoDB引擎是如今MySQL的預設引擎,支援事務操作並且具有良好的效能,可靠性和安全性更勝一籌。在寫和更新操作密集或者需要事務操作的的環境下,應該選擇使用該引擎。