MySQL 存儲引擎對比

jopen 11年前發布 | 49K 次閱讀 MySQL 數據庫服務器

下表顯示了各種存儲引擎的特性:

20130611083631546.jpeg

其中最常見的兩種存儲引擎是MyISAM和InnoDB

剛接觸MySQL的時候可能會有些驚訝,竟然有不支持事務的存儲引擎,學過關系型數據庫理論的人都知道,事務是關系型數據庫的核心。但是在現實應用中(特別是互聯網),為了提高性能,在某些場景下可以擯棄事務。下面一一介紹各種存儲引擎:

 

MyISAM存儲引擎

MyISAM是MySQL官方提供默認的存儲引擎,其特點是不支持事務、表鎖和全文索引,對于一些OLAP系統,操作速度快。

每個MyISAM在磁盤上存儲成三個文件。文件名都和表名相同,擴展名分別是.frm(存儲表定義)、.MYD (MYData,存儲數據)、.MYI (MYIndex,存儲索引)。這里特別要注意的是MyISAM不緩存數據文件,只緩存索引文件。

InnoDB存儲引擎

InnoDB存儲引擎支持事務,主要面向OLTP方面的應用,其特點是行鎖設置、支持外鍵,并支持類似于Oracle的非鎖定讀,即默認情況下讀不產生鎖。InnoDB將數據放在一個邏輯表空間中(類似Oracle)。InnoDB通過多版本并發控制來獲得高并發性,實現了ANSI標準的4種隔離級別,默認為Repeatable,使用一種被稱為next-key locking的策略避免幻讀。

對于表中數據的存儲,InnoDB采用類似Oracle索引組織表Clustered的方式進行存儲。

InnoDB 存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB 寫的處理效率差一些并且會占用更多的磁盤空間以保留數據和索
引。

 

NDB存儲引擎

NDB存儲引擎是一個集群存儲引擎,類似于Oracle的RAC,但它是Share Nothing的架構,因此能提供更高級別的高可用性和可擴展性。NDB的特點是數據全部放在內存中,因此通過主鍵查找非常快。

關于NDB,有一個問題需要注意,它的連接(join)操作是在MySQL數據庫層完成,不是在存儲引擎層完成,這意味著,復雜的join操作需要巨大的網絡開銷,查詢速度會很慢。

 

Memory (Heap) 存儲引擎

Memory存儲引擎(之前稱為Heap)將表中數據存放在內存中,如果數據庫重啟或崩潰,數據丟失,因此它非常適合存儲臨時數據。

 

Archive存儲引擎

正如其名稱所示,Archive非常適合存儲歸檔數據,如日志信息。它只支持INSERT和SELECT操作,其設計的主要目的是提供高速的插入和壓縮功能。

 

Federated存儲引擎

Federated存儲引擎不存放數據,它至少指向一臺遠程MySQL數據庫服務器上的表,非常類似于Oracle的透明網關。

 

Maria存儲引擎

Maria存儲引擎是新開發的引擎,其設計目標是用來取代原有的MyISAM存儲引擎,從而成為MySQL默認的存儲引擎。

 

最后需要強調一點,雖然MySQL有非常多的存儲引擎,但它們之間不存在優劣關系,而是根據不同的應用選擇適合自己業務的存儲引擎。如果你能力夠強,也可以自己修改或開發存儲引擎,這不就是開源的魅力所在嗎?

來自:http://blog.csdn.net/u010415792/article/details/9073927

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!