1. 程式人生 > >InnoDB引擎和MyISAM引擎的效能對比

InnoDB引擎和MyISAM引擎的效能對比

介紹:InnoDB和MyISAM作為MySQL資料庫中最主要最常用的儲存引擎,各有所長。MySQL5.5版本之前,MyISAM是MySQL預設的儲存引擎,5.5之後,MySQL的預設引擎變成了InnoDB。對於這兩種儲存引擎的選擇,根據專案應用特點來權衡。(建議儘量不要混合使用多種儲存引擎,容易帶來更復雜的問題)。

MyISAM:支援全文索引,基於分詞建立的索引,利於複雜的查詢,但不是事務安全的,也不支援外來鍵。每張MyISAM表存放在3個檔案中:frm檔案存放表結構;資料檔案是MYD(MYData);索引檔案是MYI(MYIndex)。對於MyISAM表,它可以手工或自動執行檢查或修復操作。

InnoDB:是事務型引擎,支援回滾,具有奔潰恢復能力,多版本併發控制(MVCC)、支援ACID、支援行級鎖(不是絕對的,一個語句沒有用到索引,InnoDB表同樣會鎖全表)。
InnoDB工作原理:就是把所有資料放到記憶體,被使用者讀寫,這樣就大大增加效能,記憶體中讀寫比磁碟中快得多啊!它的設計理論就是充分利用記憶體,減少磁碟I/O使用率。

MyISAM和InnoDB之間的主要區別有以下幾點

  • MyISAM是非事務安全型,InnoDB是事務安全的,也就是ACID事務支援;
  • MyISAM是表級鎖,鎖開銷小,而InnoDB支援行級鎖,鎖管理開銷大,但是支援更好的併發寫操作;
  • MyISAM支援全文索引,InnoDB不支援,但是5.6之後提供支援了;
  • MyISAM簡單,管理方便,因此效率上優於InnoDB,小應用可以考慮用MyISAM;
  • MyISAM表是儲存成檔案的形式,在跨平臺的資料轉移中使用MyISAM可以省去不少麻煩;
  • InnoDB比MyISAM更加安全,可以在保證資料不丟失的情況下,切換非事務表到事務表。

總結:其實有兩個選擇,一般都是從安全和效能兩方面來考慮,技術在開始一般對效能要求低,但是隨著業務、資料慢慢增加,不得不考慮效能了。