程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL存儲引擎中的MyISAM和InnoDB差別詳解

MySQL存儲引擎中的MyISAM和InnoDB差別詳解

編輯:MySQL綜合教程

MySQL存儲引擎中的MyISAM和InnoDB差別詳解。本站提示廣大學習愛好者:(MySQL存儲引擎中的MyISAM和InnoDB差別詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL存儲引擎中的MyISAM和InnoDB差別詳解正文


在應用MySQL的進程中對MyISAM和InnoDB這兩個概念存在了些疑問,究竟二者引擎有何分離一向是存在我心中的疑問。為懂得開這個謎題,搜索了收集,找到了以下信息:

MyISAM是MySQL的默許數據庫引擎(5.5版之前),由晚期的ISAM(Indexed Sequential Access Method:有索引的次序拜訪辦法)所改進。固然機能極佳,但卻有一個缺陷:不支撐事務處置(transaction)。不外,在這幾年的成長下,MySQL也導入了InnoDB(另外一種數據庫引擎),以強化參考完全性與並發背規處置機制,後來就逐步代替MyISAM。

InnoDB,是MySQL的數據庫引擎之一,為MySQL AB宣布binary的尺度之一。InnoDB由Innobase Oy公司所開辟,2006年蒲月時由甲骨文公司並購。與傳統的ISAM與MyISAM比擬,InnoDB的最年夜特點就是支撐了ACID兼容的事務(Transaction)功效,相似於PostgreSQL。今朝InnoDB采取雙制度受權,一是GPL受權,另外一是專有軟件受權。

MyISAM與InnoDB的差別是甚麼?

1、 存儲構造

MyISAM:每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開端,擴大名指出文件類型。.frm文件存儲表界說。數據文件的擴大名為.MYD (MYData)。索引文件的擴大名是.MYI (MYIndex)。
InnoDB:一切的表都保留在統一個數據文件中(也能夠是多個文件,或許是自力的表空間文件),InnoDB表的年夜小只受限於操作體系文件的年夜小,普通為2GB。

2、 存儲空間

MyISAM:可被緊縮,存儲空間較小。支撐三種分歧的存儲格局:靜態表(默許,然則留意數據末尾不克不及有空格,會被去失落)、靜態表、緊縮表。
InnoDB:須要更多的內存和存儲,它會在主內存中樹立其公用的緩沖池用於高速緩沖數據和索引。

3、 可移植性、備份及恢復

MyISAM:數據是以文件的情勢存儲,所以在跨平台的數據轉移中會很便利。在備份和恢復時可零丁針對某個表停止操作。
InnoDB:收費的計劃可所以拷貝數據文件、備份 binlog,或許用 mysqldump,在數據量到達幾十G的時刻就絕對苦楚了。

4、 事務支撐

MyISAM:強調的是機能,每次查詢具有原子性,其履行數度比InnoDB類型更快,然則不供給事務支撐。
InnoDB:供給事務支撐事務,內部鍵等高等數據庫功效。 具有事務(commit)、回滾(rollback)和瓦解修復才能(crash recovery capabilities)的事務平安(transaction-safe (ACID compliant))型表。

5、 AUTO_INCREMENT

MyISAM:可以和其他字段一路樹立結合索引。引擎的主動增加列必需是索引,假如是組合索引,主動增加可以不是第一列,他可以依據後面幾列停止排序後遞增。
InnoDB:InnoDB中必需包括只要該字段的索引。引擎的主動增加列必需是索引,假如是組合索引也必需是組合索引的第一列。

6、 表鎖差別

MyISAM:只支撐表級鎖,用戶在操作myisam表時,select,update,delete,insert語句都邑給表主動加鎖,假如加鎖今後的表知足insert並發的情形下,可以在表的尾部拔出新的數據。
InnoDB:支撐事務和行級鎖,是innodb的最年夜特點。行鎖年夜幅度進步了多用戶並發操作的新能。然則InnoDB的行鎖,只是在WHERE的主鍵是有用的,非主鍵的WHERE都邑鎖全表的。

7、 全文索引

MyISAM:支撐 FULLTEXT類型的全文索引
InnoDB:不支撐FULLTEXT類型的全文索引,然則innodb可使用sphinx插件支撐全文索引,而且後果更好。

8、 表主鍵

MyISAM:許可沒有任何索引和主鍵的表存在,索引都是保留行的地址。
InnoDB:假如沒有設定主鍵或許非空獨一索引,就會主動生成一個6字節的主鍵(用戶弗成見),數據是主索引的一部門,附加索引保留的是主索引的值。

9、 表的詳細行數

MyISAM:保留有表的總行數,假如select count(*) from table;會直接掏出出該值。
InnoDB:沒有保留表的總行數,假如應用select count(*) from table;就會遍歷全部表,消費相當年夜,然則在加了wehre前提後,myisam和innodb處置的方法都一樣。

10、 CURD操作

MyISAM:假如履行年夜量的SELECT,MyISAM是更好的選擇。
InnoDB:假如你的數據履行年夜量的INSERT或UPDATE,出於機能方面的斟酌,應當應用InnoDB表。DELETE 從機能上InnoDB更優,但DELETE FROM table時,InnoDB不會從新樹立表,而是一行一行的刪除,在innodb上假如要清空保留有年夜量數據的表,最好應用truncate table這個敕令。

11、 外鍵

MyISAM:不支撐
InnoDB:支撐
經由過程上述的剖析,根本上可以斟酌應用InnoDB來替換MyISAM引擎了,緣由是InnoDB本身許多優越的特色,好比事務支撐、存儲 進程、視圖、行級鎖定等等,在並發許多的情形下,信任InnoDB的表示確定要比MyISAM強許多。別的,任何一種表都不是全能的,只用適當的針對營業類型來選擇適合的表類型,能力最年夜的施展MySQL的機能優勢。假如不是很龐雜的Web運用,非症結運用,照樣可以持續斟酌MyISAM的,這個詳細情形可以本身推敲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved