# 引擎分類
InnoDB引擎
1.將數據存儲在表空間中,表空間由一系列的數據文件組成,由InnoDB管理;
2.支持每個表的數據和索引存放在單獨文件中(innodb_file_per_table);
3.支持事務,采用MVCC來控制并發,并實現標準的4個事務隔離級別,支持外鍵;
4.索引基于聚簇索引建立,對于主鍵查詢有較高性能;
5.數據文件的平臺無關性,支持數據在不同的架構平臺移植;
6.能夠通過一些工具支持真正的熱備。如XtraBackup等;
7.內部進行自身優化如采取可預測性預讀,能夠自動在內存中創建hash索引等。
MyISAM引擎
1.MySQL5.1中默認,不支持事務和行級鎖;
2.提供大量特性如全文索引、空間函數、壓縮、延遲更新等;
3.數據庫故障后,安全恢復性差;
4.對于只讀數據可以忍受故障恢復,MyISAM依然非常適用;
5.日志服務器的場景也比較適用,只需插入和數據讀取操作;
6.不支持單表一個文件,會將所有的數據和索引內容分別存在兩個文件中;
7.MyISAM對整張表加鎖而不是對行,所以不適用寫操作比較多的場景;
8.支持索引緩存不支持數據緩存。
Archive引擎
1.只支持insert和select操作;
2.緩存所有的寫數據并進行壓縮存儲,支持行級鎖但不支持事務;
3.適合高速插入和數據壓縮,減少IO操作,適用于日志記錄和歸檔服務器。
Blackhole引擎
1.沒有實現任何存儲機制,會將插入的數據進行丟棄,但會存儲二進制日志;
2.會在一些特殊需要的復制架構的環境中使用。
CSV引擎
1.可以打開CSV文件存儲的數據,可以將存儲的數據導出,并利用excel打開;
2.可以作為一種數據交換的機制,同樣經常使用。
Memory引擎
1.將數據在內存中緩存,不消耗IO;
2.存儲數據速度較快但不會被保留,一般作為臨時表的存儲被使用。
Federated引擎
能夠訪問遠程服務器上的數據的存儲引擎。能夠建立一個連接連到遠程服務器。
Mrg_MyISAM引擎
將多個MYISAM表合并為一個。本身并不存儲數據,數據存在MyISAM表中間。
NDB集群引擎
MySQL Cluster專用
# 存儲引擎選取參考因素
1.是否有事務需求
如果需要事務支持最好選擇InnoDB或者XtraDB,如果主要是select和insert操作MyISAM比較合適,一般使用日志型的應用。
2.備份操作需求
如果能夠關閉服務器進行備份,那么該因素可以忽略,如果需要在線進行熱備份,則InnoDB引擎是一個不錯的選擇。
3.故障恢復需求
在對恢復要求比較好的場景中推薦使用InnoDB,因為MyISAM數據損壞概率比較大而且恢復速度比較慢。
4.性能上的需求
有些業務需求只有某些特定的存儲引擎才能夠滿足,如地理空間索引也只有MyISAM引擎支持。所以在應用架構需求環境中也需要管理員折衷考慮,當然從各方面比較而言,InnoDB引擎還是默認應該被推薦使用的。