標籤:索引 最好 cluster 互動 資料 全文檢索索引 通過 功能 width
儲存引擎是為不同的表類型處理 SQL 操作的 MySql 組件。InnoDB 是預設的、最通用的儲存引擎,也是官方推薦使用的儲存引擎,除非一些特定案例。MySql 5.6 中的 CREATE TABLE 語句建立的表的儲存引擎預設就是 InnoDB。MySql server使用的是一個可插拔儲存引擎架構。它能夠在執行的時候動態載入或者卸載這些儲存引擎。能夠使用 SHOW ENGINES 語句來查看你的 MySql server所支援的儲存引擎。
Support 列裡的值指示出是否一個引擎能夠被你使用:YES、NO 以及 DEFAULT 值分別表示某儲存引擎是可用、不可用、可用而且是當前預設的儲存引擎。
MySql 5.6 所支援的儲存引擎
- InnoDB:MySql 5.6 版本號碼預設的儲存引擎。InnoDB 是一個事務安全的儲存引擎,它具備提交、復原以及崩潰恢複的功能以保護使用者資料。InnoDB 的行層級鎖定以及 Oracle 風格的一致性無鎖讀提升了它的多使用者並發數以及效能。InnoDB 將使用者資料存放區在叢集索引中以降低基於主鍵的普通查詢所帶來的 I/O 開銷。為了保證資料的完整性,InnoDB 還支援外鍵約束。
- MyISAM:表層級的鎖定限制了它在讀寫負載方面的效能,因此它經常應用於僅僅讀或者以讀為主的資料情境。
- Memory:在記憶體中儲存全部資料,應用於對非重要資料由高速尋找的情境。Memory 引擎曾被稱為 HEAP 引擎。
它的使用案例正在降低:InnoDB 的記憶體緩衝區為將大部分或全部資料保持在記憶體提供了一個通用並耐用的方式。NDBCLUSTER 為大分布式資料集提供了高速的 key-value 訪問。
- CSV:它的表真的是以逗號分隔的文字檔。CSV 表同意你以 CSV 格式匯入匯出資料,以同樣的讀和寫的格式和指令碼和應用互動資料。因為 CSV 表沒有索引,你最好是在普通操作中將資料放在 InnoDB 表裡。僅僅有在匯入或匯出階段使用一下 CSV 表。
- Archive:黑洞儲存引擎。相似於 Unix 的 /dev/null,Archive 僅僅接收但卻並不儲存資料。對這樣的引擎的表的查詢經常返回一個空集。
這樣的表能夠應用於 DML 語句須要發送到從server,但主server並不會保留這樣的資料的備份的主從配置中。
- NDB:(又名 NDBCLUSTER)——這樣的叢集資料引擎尤其適合於須要最高程度的正常執行時間和可用性的應用。注意:NDB 儲存引擎在標準 MySql 5.6 版本號碼裡並不被支援。眼下能夠支援 MySql 叢集的版本號碼有:基於 MySql 5.1 的 MySQL Cluster NDB 7.1;基於 MySql 5.5 的 MySQL Cluster NDB 7.2。基於 MySql 5.6 的 MySQL Cluster NDB 7.3。同樣基於 MySql 5.6 的 MySQL Cluster NDB 7.4 眼下正處於研發階段。
- Merge:同意 MySql DBA 或開發人員將一系列同樣的 MyISAM 表進行分組,並把它們作為一個對象進行引用。
適用於超大規模資料情境。如資料倉儲。
- Federated:提供了從多個物理機上聯結不同的 MySql server來建立一個邏輯資料庫的能力。適用於分布式或者資料超市的情境。
- Example:這樣的儲存引擎用以儲存闡明怎樣開始寫新的儲存引擎的 MySql 原始碼的範例。它主要針對於有興趣的開發人員。
這樣的儲存引擎就是一個啥事也不做的 "存根"。你能夠使用這樣的引擎建立表,可是你無法向其儲存不論什麼資料。也無法從它們檢索不論什麼索引。
對於整台server或整個 schema 你並不受限於使用同一種儲存引擎。你能夠為全部表定義儲存引擎。比方,一個應用可能以 InnoDB 表為主。輔以一個 CSV 表用以匯出資料到試算表。少許 MEMORY 表用以暫時工作空間。
儲存引擎的選擇MySql 提供的這些儲存引擎為不同的應用案例進行設計。下表為 MySql 提供的儲存引擎做了一個概述:
儲存引擎特性總結
| 特性 |
MyISAM |
Memory |
InnoDB |
Archive |
NDB |
| 儲存上限 |
NDB |
RAM |
64TB |
無 |
384EB |
| 事務支援 |
否 |
否 |
是 |
否 |
是 |
| 鎖粒度 |
表 |
表 |
行 |
表 |
行 |
| MVCC |
否 |
否 |
是 |
否 |
否 |
| 地理空間資料類型支援 |
是 |
否 |
是 |
是 |
是 |
| 地理空間索引支援 |
是 |
否 |
是 |
否 |
否 |
| B-tree 索引 |
是 |
是 |
是 |
否 |
否 |
| T-tree 索引 |
否 |
否 |
否 |
否 |
是 |
| Hash 索引 |
否 |
是 |
否 |
否 |
是 |
| 全文檢索索引索引 |
是 |
否 |
是 |
否 |
否 |
| 叢集索引 |
否 |
否 |
是 |
否 |
否 |
| 資料緩衝 |
否 |
N/A |
是 |
否 |
是 |
| 索引緩衝 |
是 |
N/A |
是 |
否 |
是 |
| 資料壓縮 |
是 |
否 |
是 |
是 |
否 |
| 資料加密 |
是 |
是 |
是 |
是 |
是 |
| 支援資料庫叢集 |
否 |
否 |
否 |
否 |
是 |
| 支援主從 |
是 |
是 |
是 |
是 |
是 |
| 支援外鍵 |
否 |
否 |
是 |
否 |
否 |
| 備份/時間點恢複 |
是 |
是 |
是 |
是 |
是 |
| 支援查詢快取 |
是 |
是 |
是 |
是 |
是 |
| 更新資料字典的統計 |
是 |
是 |
是 |
是 |
是 |
注意
- InnoDB 在 MySQL 5.7.5 及以後的版本號碼才支援地理空間索引
- InnoDB 通過其自適應雜湊索引的特性內建進行雜湊索引最佳化
- InnoDB 在 MySql 5.6.4 及以後版本號碼才幹支援 FULLTEXT 索引
- MyISAM 僅僅能在行壓縮格式時支援資料壓縮。
使用了行壓縮的 MyISAM 表僅僅讀
- InnoDB 表壓縮要求 InnoDB Barracuda 檔案格式
- MySql 的資料加密是由server的加密函數提供,並不是儲存引擎
- 主從支援、備份/時間點恢複等功能也是由server提供,而並不是儲存引擎
原文連結:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html。
MySql 儲存引擎的選取