標籤:
下表顯示了各種儲存引擎的特性:
其中最常見的兩種儲存引擎是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://www.open-open.com/lib/view/open1370959041320.html
MySql儲存引擎特性對比