共計 2260 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章主要講解了“InnoDB 和 MyISAM 有什么差異”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“InnoDB 和 MyISAM 有什么差異”吧!
InnoDB 和 MyISAM 是許多人在使用 MySQL 時最常用的兩個表類型,這兩個表類型各有優劣,視具體應用而定。
基本的差別為:MyISAM 類型不支持事務處理等高級處理,而 InnoDB 類型支持。
MyISAM 類型的表強調的是性能,其執行數度比 InnoDB 類型更快,但是不提供事務支持,而 InnoDB 提供事務支持已經外部鍵等高級數據庫功能。
以下是一些細節和具體實現的差別:
◆1.InnoDB 不支持 FULLTEXT 類型的索引。
◆2.InnoDB 中不保存表的具體行數,也就是說,執行 select count(*) from table 時,InnoDB 要掃描一遍整個表來計算有多少行,但是 MyISAM 只要簡單的讀出保存好的行數即可。
注意的是,當 count(*)語句包含 where 條件時,兩種表的操作是一樣的。
◆3. 對于 AUTO_INCREMENT 類型的字段,InnoDB 中必須包含只有該字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立聯合索引。
◆4.DELETE FROM table 時,InnoDB 不會重新建立表,而是一行一行的刪除。
◆5.LOAD TABLE FROM MASTER 操作對 InnoDB 是不起作用的,解決方法是首先把 InnoDB 表改成 MyISAM 表,導入數據后再改成 InnoDB 表,但是對于使用的額外
的 InnoDB 特性 (例如外鍵) 的表不適用。
另外,InnoDB 表的行鎖也不是絕對的,假如在執行一個 SQL 語句時 MySQL 不能確定要掃描的范圍,InnoDB 表同樣會鎖全表,
例如 update table set num=1 where name like“%aaa%”
兩種類型最主要的差別就是 Innodb 支持事務處理與外鍵和行級鎖. 而 MyISAM 不支持. 所以 MyISAM 往往就容易被人認為只適合在小項目中使用。
我作為使用 MySQL 的用戶角度出發,Innodb 和 MyISAM 都是比較喜歡的,但是從我目前運維的數據庫平臺要達到需求:99.9% 的穩定性,方便的擴展性和高可用性來說的話,MyISAM 絕對是我的首選。
原因如下:
1、首先我目前平臺上承載的大部分項目是讀多寫少的項目,而 MyISAM 的讀性能是比 Innodb 強不少的。
2、MyISAM 的索引和數據是分開的,并且索引是有壓縮的,內存使用率就對應提高了不少。能加載更多索引,而 Innodb 是索引和數據是緊密捆綁的,沒有使用壓縮從而會造成 Innodb 比 MyISAM 體積龐大不小。
3、從平臺角度來說,經常隔 1,2 個月就會發生應用開發人員不小心 update 一個表 where 寫的范圍不對,導致這個表沒法正常用了,這個時候 MyISAM 的優越性就體現出來了,隨便從當天拷貝的壓縮包取出對應表的文件,隨便放到一個數據庫目錄下,然后 dump 成 sql 再導回到主庫,并把對應的 binlog 補上。如果是 Innodb,恐怕不可能有這么快速度,別和我說讓 Innodb 定期用導出 xxx.sql 機制備份,因為我平臺上最小的一個數據庫實例的數據量基本都是幾十 G 大小。
4、從我接觸的應用邏輯來說,select count(*) 和 order by 是最頻繁的,大概能占了整個 sql 總語句的 60% 以上的操作,而這種操作 Innodb 其實也是會鎖表的,很多人以為
Innodb 是行級鎖,那個只是 where 對它主鍵是有效,非主鍵的都會鎖全表的。
5、還有就是經常有很多應用部門需要我給他們定期某些表的數據,MyISAM 的話很方便,只要發給他們對應那表的 frm.MYD,MYI 的文件,讓他們自己在對應版本的數據庫啟動
就行,而 Innodb 就需要導出 xxx.sql 了,因為光給別人文件,受字典數據文件的影響,對方是無法使用的。
6、如果和 MyISAM 比 insert 寫操作的話,Innodb 還達不到 MyISAM 的寫性能,如果是針對基于索引的 update 操作,雖然 MyISAM 可能會遜色 Innodb, 但是那么高并發的寫,從庫能否追的上也是一個問題,還不如通過多實例分庫分表架構來解決。
7、如果是用 MyISAM 的話,merge 引擎可以大大加快應用部門的開發速度,他們只要對這個 merge 表做一些 select count(*)操作,非常適合大項目總量約幾億的 rows
某一類型 (如日志,調查統計) 的業務表。
當然 Innodb 也不是絕對不用,用事務的項目如模擬炒股項目,我就是用 Innodb 的,活躍用戶 20 多萬時候,也是很輕松應付了,因此我個人也是很喜歡 Innodb 的,只是如果從數據庫平臺應用出發,我還是會首選 MyISAM。
另外,可能有人會說你 MyISAM 無法抗太多寫操作,但是我可以通過架構來彌補,說個我現有用的數據庫平臺容量:主從數據總量在幾百 T 以上,每天十多億 pv 的動態頁面,還有幾個大項目是通過數據接口方式調用未算進 pv 總數,(其中包括一個大項目因為初期 memcached 沒部署, 導致單臺數據庫每天處理 9 千萬的查詢)。而我的整體數據庫服務器平均負載都在 0.5- 1 左右。
感謝各位的閱讀,以上就是“InnoDB 和 MyISAM 有什么差異”的內容了,經過本文的學習后,相信大家對 InnoDB 和 MyISAM 有什么差異這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!