存储引擎是为不同的表类型处理 SQL 操作的 MySql 组件。InnoDB 是默认的、最通用的存储引擎,也是官方推荐使用的存储引擎,除非一些特定案例。MySql 5.6 中的 CREATE TABLE 语句创建的表的存储引擎默认就是 InnoDB。
MySql 服务器使用的是一个可插拔存储引擎架构,它能够在运行的时候动态加载或者卸载这些存储引擎。
可以使用 SHOW ENGINES 语句来查看你的 MySql 服务器所支持的存储引擎。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 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。
· 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 服务器来创建一个逻辑数据库的能力。适用于分布式或者数据市场的场景。
· Example:这种存储引擎用以保存阐明如何开始写新的存储引擎的 MySql 源码的例子。它主要针对于有兴趣的开发人员。这种存储引擎就是一个啥事也不做的 "存根"。你可以使用这种引擎创建表,但是你无法向其保存任何数据,也无法从它们检索任何索引。
对于整台服务器或整个 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 |
是 |
否 |
是 |
数据压缩 |
是 |
否 |
是 |
是 |
否 |
数据加密 |
是 |
是 |
是 |
是 |
是 |
支持数据库集群 |
否 |
否 |
否 |
否 |
是 |
支持主从 |
是 |
是 |
是 |
是 |
是 |
支持外键 |
否 |
否 |
是 |
否 |
否 |
备份/时间点恢复 |
是 |
是 |
是 |
是 |
是 |
支持查询缓存 |
是 |
是 |
是 |
是 |
是 |
更新数据字典的统计 |
是 |
是 |
是 |
是 |
是 |
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 中防止接口重复提交的方法有哪些?(java接口防止重复提交的方法是什么)
- 如何提高 Java Office 的性能?(java office 怎样提高性能 )
- Java 抽象工厂模式的优缺点有哪些?(java抽象工厂模式有哪些优缺点)
- 在 Java 中,charsequence 的具体用法究竟是什么?(java中charsequence的用法是什么)
- 如何利用 Java Quarter 进行数据挖掘?(java quarter如何进行数据挖掘)
- Java 中常见的比较操作符有哪些?(Java比较操作符有哪些)
- 在 Java 中,Integer 究竟有哪些作用呢?(java中integer的作用是什么)
- Java 实体类如何进行赋值操作?(java实体类怎么赋值)
- Java 中 switch case 的具体用法有哪些?(switchcase在java中的用法)
- 如何在 Java EMqtt 中实现消息确认机制?(Java EMqtt怎样实现消息确认机制)