前言
我这篇笔记的关键部分算是直接拷贝了不少大佬写的资料,但由于当时没有记录链接,导致我现在无法找到这些资料的来源,也就无法将链接写进“参考资料”栏目里以便表示感谢。如果原作者看到,请在下面评论源地址链接,我会在后续加上的。
什么是数据引擎
定义
为了对应不同的业务,mysql会使用不同的存储机制,索引技巧来安排数据库,而这些技术就可以被称为数据引擎。它是数据库的一种内部属性。
查看
使用show engines
即可查看数据库的引擎。我使用的是navicat for mysql,查询出来的结果如图所示
其中yes表示当前可以切换的数据引擎,而default自然就代表默认使用的数据引擎,no代表的就是禁用的数据引擎,可以通过命令开启。
五个主流引擎的对比
特性 | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
存储上限 | NDB | RAM | 64TB | 无 | 384EB |
事务支持 | 否 | 否 | 是 | 否 | 是 |
锁粒度 | 表 | 表 | 行 | 表 | 行 |
MVCC | 否 | 否 | 是 | 否 | 否 |
地理空间数据类型支持 | 是 | 否 | 是 | 是 | 是 |
地理空间索引支持 | 是 | 否 | 是 | 否 | 否 |
B-tree 索引 | 是 | 是 | 是 | 否 | 否 |
T-tree 索引 | 否 | 否 | 否 | 否 | 是 |
Hash 索引 | 否 | 是 | 否 | 否 | 是 |
全文检索索引 | 是 | 否 | 是 | 否 | 否 |
聚集索引 | 否 | 否 | 是 | 否 | 否 |
数据缓存 | 否 | N/A | 是 | 否 | 是 |
索引缓存 | 是 | N/A | 是 | 否 | 是 |
数据压缩 | 是 | 否 | 是 | 是 | 否 |
数据加密 | 是 | 是 | 是 | 是 | 是 |
支持数据库集群 | 否 | 否 | 否 | 否 | 是 |
支持主从 | 是 | 是 | 是 | 是 | 是 |
支持外键 | 否 | 否 | 是 | 否 | 否 |
备份/时间点恢 | 复 | 是 | 是 | 是 | 是 |
支持查询缓存 | 是 | 是 | 是 | 是 | 是 |
更新数据字典的统计 | 是 | 是 | 是 | 是 | 是 |
特性简介
- 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 表。
- Blackhole:黑洞存储引擎,类似于 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 源码的例子。它主要针对于有兴趣的开发人员。这种存储引擎就是一个啥事也不做的 “存根”。你可以使用这种引擎创建表,但是你无法向其保存任何数据,也无法从它们检索任何索引。
- Archive:archive是归档的意思,仅仅支持插入和查询两种功能,在MySQL5.5以后支持索引功能,他拥有很好的压缩机制,使用zlib压缩库,在记录请求的时候实时的进行压缩,经常被用来作为仓库使用。适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度但是对查询的支持较差。