[TOC]
## InnoDB存儲引擎
InnoDB存儲引擎支持事務,其設計目標主要面向在線事務處理(OLTP)的應用.
其特點十行鎖設計、支持危機,并支持類型與Oracle的非鎖定讀,即默認讀取操作不會產生鎖。
InnoDB通過使用多版本并發控制(MVCC) 來獲取高并發性,并且實現了SQL標準的4種隔離,默認為REPEATABLE級別。同時使用一種被稱為next-keylocking的策略來避免幻讀(phantom)現象的產生。 除此之外,InnoDB存儲引擎還提供了插入緩沖(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、InnoDB存儲的鎖信息(lock info)、數據字典信息(data dictionary)等高性能和高可用的功能。
對于表中數據的存儲, InnoDB存儲引擎采用了聚集(slustered)的方式,因此每張表的存儲都是按主鍵的順序存放。如果沒有顯式地在表定義時指定主鍵,InnoDB存儲引擎會為每一行生成一個6字節的ROWID,并以此為主鍵。
* * * * *
## MyISAM存儲引擎
MyISAM存儲引擎**不支持事務**、表鎖設計,支持全文索引,主要面向一些OLAP數據庫應用。 MyISAM存儲引擎另一個與眾不同的地方是它的緩沖池只緩存(cache)索引文件,而不緩沖數據文件。
MyISAM存儲引擎表由MYD和MYI組成,MYD用來存放數據文件,MYI用來存放索引文件。 可以通過myisampack工具來進一步壓縮數據文件(采用赫夫曼【Huffman】)編碼靜態算法來壓縮數據,因此壓縮之后的數據表示只讀的, 也可以通過該工具解壓數據文件。 從5.0版本之前 默認支持表大小為4GB,5.0開始默認支持256TB的單表數據。

* * * * *
## NDB存儲引擎
NDB存儲引擎是一個集群存儲引擎,類似于Oracle 的RAC集群,不過與其架構不同的是,其結構是share nothing 的集群架構,因此能提供更高的可用性。NDB的特點是數據全部放在內存中(mysql 5.1版本開始,可以將非索引數據放在磁盤上),因此主鍵查找速度極快,并且通過添加NDB數據存儲節點(Data Node)可以線性地提高數據庫性能,是高可用、高性能的集群系統。
注意:NDB存儲引擎的連接操作(JOIN)是在MySQL數據庫層完成的 ,而不是在存儲引擎層完成的。 這意味著,復雜的挎包和操作需要巨大的網絡開銷,因此查詢速度很慢。

*****
## Memory存儲引擎
Memory存儲引擎(之前稱為HEAP存儲引擎)將表中的數據存放在內存中,如果數據重啟或者發生崩潰,表中的數據將不在 所以適合用于存儲臨時數據的臨時表,以及數據倉庫的緯度表。 Memory存儲引擎默認使用哈希索引,而不是我們熟悉的B+樹狀索引。
Memory存儲引擎速度非常快,但是也有一定的限制。比如:只支持表鎖,并發性能差。并且不支持TEXT和BLOB列類型。最重要的是,存儲變長字段(varchar)時是按照定常字段(char)的方式進行的,因此會浪費內存(已經給出了patch解決方案)。
MySQL數據庫使用Memory存儲引擎作為臨時表存放查詢中間的結果集。 如果中間結果集大于Memory存儲引擎表的容量設置,或者含有TEXT或BLOB列類型字段,則MySQL數據庫會轉換成MyISAM存儲引擎表而存放到磁盤。因為MyISAM不緩存數據文件,所以這是產生的臨時表的性能對于查詢會有損失。
*****
## Archive存儲引擎
Archive存儲引擎只支持INSERT 和 SELECT 操作, MySQL5.1版本支持索引。 Archive存儲引擎使用zlib算法將數據行進行壓縮 壓縮比一般可達1:10。可以用來做日志信息。 Archive存儲引擎使用行鎖來實現高并發的插入操作,但是其本身不是書屋安全的存儲引擎,其設計目標主要是提供高數的插入和壓縮功能。
*****
## Federated 存儲引擎
Federated 存儲引擎表并不存放數據,它只是指向一臺遠程MySQL數據庫服務器上的表。這非常類似于SQL Server 的鏈接服務器和Oracle的透明網關,不同的是,當前Federated存儲引擎只支持MySQL數據庫表,不支持異構數據庫表。
*****
## Maria存儲引擎
Maria存儲引擎 是新開發訂單引擎,設計目標主要是取代MyISAM存儲引擎,從而成為MySQL的默認存儲引擎。
特點:注冊緩存數據和索引文件,應用了行鎖設計,提供了MVCC功能,支持事務和非事務安全的選項,以及更好的BLOB字符類型的處理性能。
*****
## 其他存儲引擎
如:Merge、CSV、Sphinx和Infobright等。
不同之處:存儲容量的限制、事務支持、鎖的粒度、MVCC支持、支持的索引、備份和復制等。

通過`show engines\G`查找information_schema架構下的ENGINES表。

可以通過更換存儲引擎來區分表的大小:
MyISAM引擎表大小為:40.7MB, InnoDB引擎表大小為:113.6MB, Archive引擎表大小為:20.2MB
