1. 程式人生 > >MySQL儲存引擎:MyISAM和InnoDB區別詳解

MySQL儲存引擎:MyISAM和InnoDB區別詳解

1、MyISAM和InnoDB區別

1.1 區別

  InnoDB MyISAM
構造

由.frm檔案、表空間(分為獨立表空間或者共享表空間)和日誌檔案(redo log)組成。

MyISAM在磁碟上儲存成三個檔案,其中.frm檔案儲存表定義;.MYD(MYData)為資料檔案;.MYI (MYIndex)為索引檔案。
事務 支援 不支援
行鎖,表鎖 表鎖
外來鍵 支援 不支援
select count(*) InnoDB必須掃描全表。 內建了一個計數器,count(*)時它直接從計數器中讀。
索引 只把索引都load到記憶體中。 把資料和索引都load到記憶體中。
全文索引 不支援 支援。

1.2 名詞解釋

表級鎖:

直接鎖定整張表,在鎖定期間,其他程序無法對該表進行寫操作,如果設定的是寫鎖,那麼其他程序讀也不允許,因此myisam支援的併發量低,但myisam不會出現死鎖;

行級鎖:

只對指定的行進行鎖定,其他程序還是可以對錶中的其他行進行操作的。因此行鎖能大大的減少資料庫操作的衝突,但有時會導致死鎖。

全文索引

指對char、varchar和text中的每個詞(停用詞除外)建立倒排序索引。MyISAM的全文索引其實沒啥用,因為它不支援中文分詞,必須由使用者分詞後加入空格再寫到資料表裡,而且少於4個漢字的詞會和停用詞一樣被忽略掉。

2、不同版本對應預設引擎

在MySQL 5.1之前的版本中,預設的搜尋引擎是MyISAM,從MySQL 5.5之後的版本中,預設的搜尋引擎變更為InnoDB。

3、如何選擇

因為MyISAM相對簡單所以在效率上要優於InnoDB.如果系統讀多,寫少。對原子性要求低。那麼MyISAM最好的選擇。且MyISAM恢復速度快。可直接用備份覆蓋恢復。
如果系統讀少,寫多的時候,尤其是併發寫入高的時候。InnoDB就是首選了。