MySql 存儲引擎的選取
阿新 • • 發佈:2017-06-07
數據集 htm apt 官方 add 保護 -m 導出數據 -a
存儲引擎是為不同的表類型處理 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 源代碼的樣例。它主要針對於有興趣的開發人員。
這樣的存儲引擎就是一個啥事也不做的 "存根"。你能夠使用這樣的引擎創建表,可是你無法向其保存不論什麽數據。也無法從它們檢索不論什麽索引。
存儲引擎的選擇
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提供,而並不是存儲引擎
MySql 存儲引擎的選取