MySQL存儲引擎 InnoDB與MyISAM的差別。本站提示廣大學習愛好者:(MySQL存儲引擎 InnoDB與MyISAM的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL存儲引擎 InnoDB與MyISAM的差別正文
根本的差異: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的。別的,能夠有人會說你MyISAM沒法抗太多寫操作,然則可以經由過程架構來填補。