Chapter 16 Alternative Storage Engines
轉自個人github,github優先更新~歡迎star~html
存儲引擎是MySQL的組件,是用來爲不一樣類型的表處理SQL操做的。InnoDB是目前默認的也是最通用的存儲引擎。Oracle也建議使用它
除了專門的使用案例。在MySQL中5.7 CREATE TABLE語句默認建立InnoDB表。mysql
MySQL服務器採用了插件式存儲引擎架構,是爲了確保存儲引擎能夠從正在運行的MySQL服務器上被裝入和卸載。git
爲了肯定你的機器支持哪一種存儲引擎,使用 SHOW ENGINES
語句。在支持列中的值表示引擎是否可使用。
值爲YES,NO,或DEFAULT分別表示一個引擎是可用的,不可用,或可用與目前設置爲默認存儲引擎。github
使用此命令前先登錄mysql;如下是個人機器顯示結果,非官方sql
mysql> SHOW ENGINES\G *************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 2. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO *************************** 6. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 7. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine Transactions: NO XA: NO Savepoints: NO *************************** 8. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO *************************** 9. row *************************** Engine: FEDERATED Support: NO Comment: Federated MySQL storage engine Transactions: NULL XA: NULL Savepoints: NULL 9 rows in set (0.00 sec)
本章介紹了專用的MySQL存儲引擎的使用案例。它不包括默認的InnoDB存儲引擎或覆蓋在第15章NDB存儲引擎,
InnoDB存儲引擎,以及第19章,MySQL集羣7.5 NDB。對於高級用戶,
本章還包含了插件式存儲引擎架構的說明(見第16.11,「MySQL存儲引擎架構概述」)。數據庫
有關商業MySQL服務器的二進制文件提供存儲引擎的支持信息,請參閱MySQL企業版服務器5.7,在MySQL的網站。
可用的存儲引擎可能取決於其企業服務器版所使用。緩存
爲了解答常見關於MySQL存儲引擎的問題,請參見A.2「的MySQL 5.7 FAQ:存儲引擎」。安全
MySQL的5.7支持的存儲引擎服務器
InnoDB:MySQL 5.7默認的存儲引擎。InnoDB的是MySQL事務安全(ACID兼容)存儲引擎,具備提交,回滾和崩潰恢復功能來保護用戶數據。
InnoDB的行級鎖(而不是升級到粗粒度鎖)和Oracle風格一致的非鎖定讀取增長了多用戶的併發性和性能。InnoDB在彙集索引中存儲用戶數據,以減小基於主鍵經常使用的查詢I/O。架構
爲了保持數據的完整性,InnoDB也支持外鍵參照完整性約束。有關InnoDB的更多信息,請參見第15章,InnoDB存儲引擎。
MyISAM:這些表有一個小的足跡。表級鎖限制在讀/寫工做負載的性能,因此它常常在只讀或讀 - 主要是在Web和數據倉庫工做負載配置使用。
Memory: 存儲全部的數據在RAM
中,是爲了在環境中快速訪問,這個要求非關鍵數據的快速查找。這個引擎的前身爲HEAP引擎。使用它的例子正在降低。
與它的緩衝池存儲器區域InnoDB提供一個通用和耐用的方式保持大部分或所有數據在內存中,而且NDBCLUSTER提供巨大分佈式數據集快速鍵值查找。
CSV:它的表是逗號分割值的text文件。CSV表格讓你能夠導入或轉儲CSV格式的數據,用腳本和應用程序讀取和寫入相同的格式進行數據交換。
因爲CSV表不被索引,一般保存在InnoDB表中的數據在正常運行期間,只有在進口或出口階段使用CSV表。
Archive: 這些緊湊,沒有索引的表意用於存儲和檢索大量不多引用的歷史,歸檔,或安全審計信息。
Blackhole: 黑洞存儲引擎接受但不存儲數據,相似於Unix的/dev/null的設備。查詢老是返回一個空集。這些表能夠在DML語句被髮送到從服務器複製配置中使用,但主服務器不保留它本身的數據副本。
NDB (也稱爲NDBCLUSTER):該集羣數據庫引擎是特別適合於那些須要運行時間和可用性的最高程度的應用。
Merge: 啓用一個MySQL DBA或開發人員進行邏輯分組的一系列等同的MyISAM表,並引用它們做爲一個對象。適合VLDB環境,如數據倉庫。
Federated:提供一種能力,能夠經過鏈接隔離的MySQL服務器來從衆多的物理服務器中建立一個邏輯數據庫。十分適合於分佈式環境或數據集市環境。
Example: 這個引擎服務器在MySQL源碼中做爲一個例子,是介紹如何開始着手寫新的存儲引擎。它主要針對有興趣的開發者。存儲引擎是一個「存根」,什麼也不作。
你可使用這個引擎建立表,可是不會有數據能夠存儲進去或者從中讀取到數據。
並不限制你只是用一個存儲引擎在一個完整的服務器或者架構中。你能夠指定任意一個表所使用的存儲引擎。好比,一個應用可能使用的最多的是InnoDB表,
一個CSV表數據導出到一個電子表格和臨時工做區的幾個MEMORY表。
選擇一個存儲引擎:
MySQL多種多樣的存儲引擎是爲了避免同的狀況所設計的。下面這個表格提供了一個關於MySQL一些存儲引擎的預覽。
存儲引擎功能摘要:
特性 | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
存儲限制 | 256TB | RAM | 64TB | None | 384EB |
事務 | No | No | Yes | No | Yes |
鎖定粒度 | 表 | 表 | 行 | 行 | 行 |
MVCC | No | No | Yes | No | No |
地理空間數據類型支持 | Yes | No | Yes | Yse | Yes |
地理空間索引支持 | Yes | No | Yes[a] | No | No |
B樹索引 | Yes | Yes | Yes | No | No |
T樹索引 | No | No | No | No | Yes |
哈希索引 | No | Yes | No[b] | No | Yes |
全文搜索索引 | Yes | No | Yes[c] | Yes | No |
彙集索引 | No | No | Yes | No | No |
數據緩存 | No | N/A | Yes | No | Yes |
索引緩存 | Yes | N/A | Yes | No | Yes |
壓縮數據 | Yes[d] | No | Yes[e] | Yes | No |
加密數據[f] | Yes | Yes | Yes | Yes | Yes |
集羣數據庫的支持 | No | No | No | No | No |
複製支持[g] | Yes | Yes | Yes | Yes | Yes |
外鍵支持 | No | No | Yes | No | No |
備份/點即時恢復[h] | Yes | Yes | Yes | Yes | Yes |
查詢緩存支持 | Yes | Yes | Yes | Yes | Yes |
數據字典更新統計 | Yes | Yes | Yes | Yes | Yes |
[a] InnoDB支持地理空間索引在MySQL5.7.5版本或者更高的版本是可用的
[b] InnoDB爲了其適應性哈希索引功能利用內部的哈希索引
[c] InnoDB支持全文索引在MySQL5.6.4版本或者更高的版本是可用的
[d] 壓縮MyISAM表只有當使用壓縮行格式是支持的。表使用MyISAM的壓縮行格式只能讀。
[e] 壓縮InnoDB表須要InnoDB Barracuda文件格式。
[f] 在服務器中實施(經過加密功能)。數據靜止加密表,在MySQL5.7版本或者更高的版本是可用的。
[g] 實施在服務器,而不是在存儲引擎。
[h] 實施在服務器,而不是在存儲引擎。