1. 程式人生 > >Mysql儲存引擎myisam與inndb的區別?

Mysql儲存引擎myisam與inndb的區別?

最近在研究Mysql儲存引擎這塊,說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法,在此做一個大概總結:

其實在工作中用的最多也就是MYISAM和INNODB,INNODB是資料庫5.6版本才有的,5.5只有MYISAN。而且預設建立表就是INNODB型別

最大的差距就是INNODB支援事物,MYISAM不支援。

檢視資料庫所有儲存引擎:SHOW ENGINES; 系統預設INNODB(自動提交事物)set autocommit = 0; 設定為0 (關閉自動提交事物)

 儲存空間:

  MYISAM:可被壓縮,儲存空間較小,支援三種不同的儲存格式:靜態表(預設,但是資料末尾不能有空格,會被去掉),動態表,壓縮表。

  INNODB:需要更多的記憶體和儲存,它會在主記憶體中建立其專用的快取池,用來快取記憶體資料和索引。

可移植性,備份和恢復:

  MYISAM:資料是以檔案形式儲存,所以跨平臺移植非常方便,備份和恢復可針對某個表進行操作。
  INNODB:直接拷貝資料檔案,備份binlog(記錄操作指令碼),或者用mysqldump,在資料量非常大的時候就比較麻煩了,可以使用java指令碼來匯入和備份。

表和鎖的差異:

  MyISAM:只支援表級鎖,使用者在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖,如果加鎖以後的表滿足insert併發的情況下,可以在表的尾部插入新的資料。
  InnoDB:支援事務和行級鎖,是innodb的最大特色。行鎖提高了多使用者併發操作的新能。但是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的。

全文索引:

  MyISAM:支援 FULLTEXT型別的全文索引。
  InnoDB:5.6不支援FULLTEXT型別的全文索引,但是innodb可以使用sphinx外掛支援全文索引,並且效果更好。

表主鍵:

  MyISAM:允許沒有任何索引和主鍵的表存在,索引都是儲存行的地址。
  InnoDB:如果沒有設定主鍵或者非空唯一索引,就會自動生成一個6位元組的主鍵(使用者不可見),資料是主索引的一部分,附加索引儲存的是主索引的值。

CURD:

  MyISAM:如果執行大量的SELECT,選擇MyISAM更好。
  InnoDB:如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表。DELETE 從效能上InnoDB更優,但DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除,在innodb上如果要清空儲存有大量資料的表,最好使用truncate table這個命令。

外來鍵:

  MyISAM:不支援
  InnoDB:支援

通過上述的分析,基本上可以考慮使用InnoDB來替代MyISAM引擎了,原因是InnoDB自身很多良好的特點,比如事務支援、儲存 過程、檢視、行級鎖定等等,在併發很多的情況下,相信InnoDB的表現肯定要比MyISAM強很多。另外,任何一種表都不是萬能的,只用恰當的針對業務型別來選擇合適的表的型別,才能最大的發揮MySQL的效能優勢。如果不是很複雜的Web應用,非關鍵應用,還是可以繼續考慮MyISAM的,如果資料量和併發比較大還是選擇INNODB吧。

分享一個Mysql5.6版本和連線工具:連結:https://pan.baidu.com/s/1phGRi969KaNwTz9VenmyuA 密碼:g8ch