InnoBD 與 MyISAM 兩者之間的對比


 

 

【存儲引擎】

MySQL中的數據用各種不同的技術存儲在文件(或內存)中,這些技術中的每一種技術都使用不同的存儲機制,索引技巧,鎖定水平並且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術及配套的相關功能稱爲存儲引擎。

 

 

在選擇存儲引擎時,需要考慮一下幾點:

 

是否有外鍵嗎?

InnoDB支持外鍵,MyISAM不支持

 

是否需要事務支持嗎?

InnoDB支持事務,MyISAM不支持

 

是否經常使用什麼樣的查詢模式?

1.COUNT()MyISAM 表中會非常快,而在InnoDB 表下可能會很痛苦

2.主鍵查詢在InnoDB下相當快,但如果主鍵太長了也會導致性能問題

3.MyISAM適合select以及insert爲主的應用,InnoDB適合頻繁update以及涉及到安全性較高的應用

 

數據有多大?

1.大尺寸的數據集趨向於選擇InnoDB方式,因爲其支持事務處理和故障恢復。

2.數據庫的大小決定了故障恢復的時間長短,InnoDB可以利用事務日誌進行數據恢復,速度比較快。

 

◆是否需要全文索引嗎?

MyISAM支持全文索引

InnoDB也支持FULLTEXT類型的索引

【注意,最後一條特別列舉出來,其實從MySQL5.5開始就已經支持了,但是網上很多地方都說不支持,千萬注意!】

 

根據經驗來看,如果是一些小型的應用或項目,那麼MyISAM 也許會更適合。

需要記住InnoDB 的表需要更多的內存和存儲,轉換100GB MyISAM 表到InnoDB 表可能會讓你有非常壞的體驗。

 

 

 

 

【區別總結】

 

 

1.InnoDB支持外鍵與事務

 

2.InnoDB 中不保存表的具體行數,執行select count(*) from table時,InnoDB要掃描一遍整個表,但是MyISAM只要簡單的讀出保存好的行數即可。但是,當count(*)語句包含where條件時,兩種表的操作是一樣的。

 

3.對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。

 

4.delete from table清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表

 

5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。

 

6.InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like %aaa%” 。

發佈了31 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章