Mysql存儲引擎有哪些?如何選擇存儲引擎?

Mysql自從5.5版本以後,默認採用InnoDB存儲引擎,那麼,除InnoDB外,Mysql還有沒有其他存儲引擎?我們可以用 SHOW ENGINES查詢引擎(只需關注4種常用引擎即可:InnoDB、MyISAM、MEMORY、MRG_MYISAM),如果你想查看當前表的存儲引擎,使用命令show create table table名即可。

Support列的值表示某種引擎是否能夠使用,YES表示可以使用,NO表示不可以使用,DEFAULT表示當前默認存儲引擎。

1)InnoDB
InnoDB是一個健壯的事務型存儲引擎,是5.5以後默認存儲引擎,也是最常用的存儲引擎之一。它提供了事務安全(ACID兼容)表,支持外鍵引用完整性約束,支持提交、回滾和緊急恢復功能來保護數據,同時還支持行級鎖定。適用如下場景:

更新密集的表:適合處理多重併發的更新請求

事務:支持事務

自動災難恢復:與其它存儲引擎不同,InnoDB表能夠自動從災難中恢復

外鍵約束:Mysql中支持外鍵的存儲引擎只有InnoDB

自動遞增:支持自動增加列AUTO_INCREMENT屬性

2)MyISAM
MyISAM表是獨立於操作系統的,所以移植方便,優勢是訪問速度快但是缺陷就是無法處理事務。支持3種不同的存儲格式,分別是靜態(固定長度)表、動態表、壓縮表,其中,靜態表是默認的存儲格式。

靜態表:字段是非變長字段,記錄是固定長度的(長度不足補空格),優點是存儲非常迅速,容易緩存,出現故障容易修復;缺點是佔用的空間通常比動態多(補空格)。
說明:MyISAM引擎在讀取數據的時默認會把字段後面的空格去掉,如果不注意會把數據本身帶的空格也會忽略。

動態表:字段是變長字段,記錄不是固定長度的,優點是佔用的空間相對較少,缺點是頻繁的更新和刪除記錄會導致碎片產生,所以要定時進行碎片整理:定期執行OPTIMIZE TABLE語句或myisamchk -r命令來改善性能,所以出現故障時恢復相對困難。

壓縮表:由myisam工具創建,佔據非常小的磁盤空間。因爲每個記錄是被單獨壓縮的,所有隻有非常小的訪問開支。

MyISAM存儲引擎適用場景:

選擇密集型的表:MyISAM存儲引擎在篩選大量數據時非常迅速(提供高速存儲和檢索以及全文搜索能力)

插入密集型的表:MyISAM的併發插入特性允許同時選擇和插入數據,所以MyISAM存儲引擎很適合管理郵件或Web服務器日誌數據等

MyISAM存儲引擎和INNODB存儲引擎的對比:

MyISAM不支持事務    INNODB支持事務

MyISAM不支持外鍵    INNODB支持外鍵

MYISAM加鎖讀取        INNODB不加鎖讀取    

MyISAM支持全文索引    INNODB不支持全文索引

MyISAM查詢速度更快    INNODB添加、修改、刪除速度更快

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章