MyISAM和InnoDB的比較

MyISAM:

  • 不支持事務,並且也不支持外鍵,可是每次查詢都是原子的
  • 支持表級鎖,即每次操做是對整個表加鎖
  • 一個MYISAM表有三個文件:索引文件、表結構文件(.frm文件)、數據文件(.MYD文件)
  • 採用非彙集索引,索引文件的數據域存儲指向數據文件的指針。輔索引與主索引基本一致,可是輔索引不用保證惟一性
優勢:查詢數據相對較快,適合大量的select,能夠全文索引。

缺點:不支持事務,不支持外鍵,併發量較小,不適合大量updatesql

InnoDb:

  • 支持ACID的事務,支持事務的四種隔離級別;
  • 支持行級鎖及外鍵約束:所以能夠支持寫併發;
  • 不存儲總行數;
  • 一個InnoDb引擎存儲在一個文件空間(共享表空間,表大小不受操做系統控制,一個表可能分佈在多個文件裏),也有可能爲多個(設置爲獨立表空,表大小受操做系統文件大小限制,通常爲2G),受操做系統文件大小的限制;
  • 主鍵索引採用彙集索引(索引的數據域存儲數據文件自己),輔索引的數據域存儲主鍵的值;所以從輔索引查找數據,須要先經過輔索引找到主鍵值,再訪問輔索引;最好使用自增主鍵,防止插入數據時,爲維持B+樹結構,文件的大調整。
優勢:支持事務,支持外鍵,併發量較大,適合大量update

缺點:查詢數據相對較快,不適合大量的select數據庫

MyISAM與InnoDB的比較

基本的差異爲:
MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。
MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。緩存

兩種存儲引擎的大體區別表如今:安全

  • 1)InnoDB支持事務,MyISAM不支持。
  • 2)InnoDB支持外鍵,MyISAM不支持.
  • 3)從MySQL5.5.5之後,InnoDB是默認引擎.
  • 4)從MySQL5.6版本開始,InnoDB開始支持FULLTEXT類型的索引.以前的版本不支持全文索引。
  • 5)InnoDB中不保存表的行數,如select count(0) from table時,InnoDB須要掃描一遍整個表來計算有多少行,可是MyISAM只要簡單的讀出保存好的行數便可。注意的是,當count(0)語句包含where條件時MyISAM也須要掃描整個表.
  • 6)對於自增加的字段,在MyISAM表中能夠和其餘字段一塊兒創建聯合索引.在InnoDB中,能夠建立只有該字段的索引,也能夠創建聯合索引,但自增鍵必須在最左側
  • 7)清空整個表(delete from )時,InnoDB是一行一行的刪除,效率很是慢。MyISAM則會重建表. (這個區別貌似不是很重要哈)
  • 8)InnoDB支持行鎖(某些狀況下仍是鎖整表,如 update table set a=1 where user like '%lee%'.
  • 9)MyISAM的索引和數據是分開的,而且索引是有壓縮的,內存使用率就對應提升了很多。能加載更多索引,而Innodb是索引和數據是緊密捆綁的,沒有使用壓縮從而會形成Innodb比MyISAM體積龐大不小.
  • 10)MyISAM緩存在內存的是索引,不是數據。而InnoDB緩存在內存的是數據,相對來講,服務器內存越大,InnoDB發揮的優點越大。

關於MyISAM與InnoDB選擇:

MYISAM和INNODB是Mysql數據庫提供的兩種存儲引擎。二者的優劣可謂是各有千秋。INNODB會支持一些關係數據庫的高級功能,如事務功能和行級鎖,MYISAM不支持。MYISAM的性能更優,佔用的存儲空間少。因此,選擇何種存儲引擎,視具體應用而定:服務器

  • 1)若是你的應用程序必定要使用事務,毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。好比DELETE FROM mytable這樣的刪除語句。
  • 2)若是你的應用程序對查詢性能要求較高,就要使用MYISAM了。MYISAM索引和數據是分開的,並且其索引是壓縮的,能夠更好地利用內存。因此它的查詢性能明顯優於INNODB。壓縮後的索引也能節約一些磁盤空間。MYISAM擁有全文索引的功能,這能夠極大地優化LIKE查詢的效率。
  • 3)MyISAM適合查詢以及插入爲主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用。
相關文章
相關標籤/搜索