MySQL儲存引擎:MyISAM和InnoDB區別詳解
阿新 • • 發佈:2018-12-21
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就是首選了。