MySQL表存儲引擎

存儲引擎時MqSQL區別於其他數據庫的一個最重要特性。每個存儲引擎都有各自的特點,能夠根據具體的應用建立不通的存儲引擎表。MySQL的核心是存儲引擎。

MySQL是開源的,可以根據MySQL預定義的存儲引擎接口編寫自己的存儲引擎,也可以通過修改源碼來實現自己想要的特性。

InnoDB存儲引擎

支持事務,主要面向在線事務處理(OLTP)方面的應用。特點是行鎖設計、支持外鍵,默認情況下讀取操作不會產生鎖。
InnoDB通過使用多版本併發控制(MVCC)來獲得高併發性,並且實現了SQL標準的4種隔離級別,默認爲REPEATABLE級別。同時使用一種被稱爲next-key locking的策略來避免幻讀(phantom)現象的產生。此外,InnoDB存儲引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用的功能。
對於表中的數據,InnoDB採用了聚集(clustered)的方式,這種方式類似於Oracle的索引聚集表(index organized table,IOT)。每張表的存儲都按主鍵的順序存放,如果沒有顯式的在表定義時指定主鍵,InnoDB存儲引擎會爲每一行生成一個6字節的ROWID,並以此作爲主鍵。

MyISAM存儲引擎

特點是不支持事務、表鎖和全文索引,對於一些OLAP(Online Analytical Processing,在線分析處理)操作速度快。
MyISAM存儲引擎表有MYD和MYI組成,MYD用來存儲數據文件,MYI用來存儲索引文件。
MySQL5.0之前,MyISAM默認支持的表大小爲4G,5.0後,默認支持256T的單表數據。

NDB存儲引擎

一個集羣存儲引擎。特點是數據全部存放在內存中(5.1開始,可以將非索引數據存在磁盤上),主鍵查找速度極快,通過添加NDB數據存儲節點(Data Node)可以線性的提高數據庫性能,是高可用、高性能的集羣系統。

Memory存儲引擎

將表中的數據存放在內存中,如果數據庫重啓或發生崩潰,表中數據將消失。非常適用於存儲臨時數據的臨時表,以及數據倉庫的緯度表。默認使用哈希索引,而不是我們熟悉的B+樹索引。

Memory存儲引擎速度非常快,使用上還是有一定限制。只支持表鎖,併發性能較差,不支持TEXT和BLOB列類型。存儲變長字段是按照定長字段方式進行的,浪費內存。
MySQL數據庫使用Memory存儲引擎作爲臨時表來存放查詢的中間結果。如果中間結果大於Memory存儲引擎的容量設置,又或者中間結果含有TEXT或BLOB列類型字段,則MySQL數據庫會把其轉換到MyISAM存儲引擎表而存放到磁盤。MyISAM不緩存數據文件,因此這時產生的臨時表的性能對於查詢會有損失。

Archive存儲引擎

只支持SELECT和INSERT操作,5.1開始支持索引。非常適合存儲歸檔數據,如日誌信息。

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