【從零開始的mysql】MySQL的存儲引擎對比

MySQL的存儲引擎對比

        mysql的每個存儲引擎都是有其各自的特點,根據具體的應用建立不同的存儲引擎表,由於mysql是開源的我們可以通過修改源碼來進行二次開發。

注意:存儲引擎是基於表的,不是數據庫

InnoDB存儲引擎

1.支持事務,主要面向事務處理(OLTP)的應用
2.支持外鍵
3.支持行級鎖,三種行鎖算法(Record Lock,Gap Lock,Next-Key Lock)
4.通過多版本併發控制(MVCC)支持高併發性,4種隔離級別(未提交讀,已提交度,可重複讀[默認],可序列化)
5.表單獨存放到獨立的.ibd文件中,表中的數據存儲採用聚集(clusterde)方式,每張表都是按主鍵順序進行存放,如果沒有在表定 義時聲明主鍵,將會爲其生成一個6字節ROWID作爲主鍵。

MyISAM存儲引擎

1.不支持事務,不支持外鍵,主要面向一些OLAP數據庫應用
2.表鎖設計
3.支持全文索引
4.表由MYD和MYI文件組成,MYD存放數據文件,MYI存放索引文件
通常用於只讀或大部分讀取工作,如報表等

NDB存儲引擎

NDB存儲引擎是一個集羣存儲引擎,其結構爲share nothing集羣架構,數據全部存放在內存中(mysql5.1後支可將非索引數據放在磁盤上),因此主鍵查找速度極快,並且通過添加NDB數據存儲節點(Data Node)可以線性的提高數據庫性能。特別適用於需要高可用的應用程序
NDB存儲引擎的連接(join)操作是在mysql數據庫層完成的,而不是在存儲引擎層完成,所以複雜的連接操作需要巨大的網絡開銷,查詢速度會很慢。

Memory存儲引擎

Memory存儲引擎將表中的數據存放在內存中,如果重啓數據會消失,適合存儲臨時數據的臨時表,默認索引使用hash索引。
Memory存儲引擎雖然速度非常快,但是支持表鎖,併發性能差,存儲變長字段varchar時是按照定長字段char來進行的,因此會浪費內存。
如果使用Memory存儲引擎作爲臨時表存放數據時,當數據集大於Memory存儲引擎表的容量設置,或結果集中包含text或blob類型字段,mysql會把其轉換爲MyISAM存儲引擎

Archive存儲引擎

Archive存儲引擎只支持insert和select操作,5.1之後支持索引,使用zlib算法將數據行壓縮存儲,適合存儲歸檔數據,如日誌。
使用行鎖實現高併發插入操作,但本身不支持事務,主要提供高速插入和壓縮功能

Maria存儲引擎

Maria存儲引擎是新開發的一個引擎,設計目標是爲了取代MyISAM的,可以看作MyISAM的後續版本,與MyISAM不同的是,支持緩存數據和索引文件,應用了行鎖設計,提供了MVCC功能,支持事務和非事務的選項,和更好的blob字符類型的處理性能

各存儲引擎比較

特點 InnoDB MyISAM Memory Archive NDB
存儲限制 64TB 256TB RAM 沒有
事務安全 支持 - - - -
鎖機制 行鎖 表鎖 表鎖 行鎖 行鎖
B樹索引 支持 支持 支持 - 支持
哈希索引 - - 支持 - 支持
全文索引 - 支持 - - -
集羣索引 支持 - - - -
T樹索引 - - - - 支持
數據緩存 支持 - 支持 - 支持
索引緩存 支持 支持 支持 - 支持
數據可壓縮 - 支持 - 支持 -
空間使用 N/A 非常低
內存使用
批量插入速度 非常高
支持外鍵 支持 - - - -
MVCC 支持 - - - -
備份/時間點恢復 支持 支持 支持 支持 支持

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