存储引擎是MySQL组件,用于处理不同表类型的SQL操作。InnoDB是默认的且用途最广泛的存储引擎,Oracle建议将其用于表(特殊用例除外)。(默认情况下CREATE TABLE,MySQL 8.0中的语句创建InnoDB表。)
MySQL Server使用可插拔的存储引擎体系结构,使存储引擎可以加载到正在运行的MySQL服务器或从正在运行的MySQL服务器上卸载。
要确定服务器支持哪些存储引擎,请使用以下SHOW ENGINES语句。Support列中的值指示是否可以使用引擎。的值YES,NO或DEFAULT表示发动机可用,不可用,或可用与当前被设置为默认的存储引擎。
mysql> SHOW ENGINES\G
*************************** 1. row ***************************
Engine : PERFORMANCE_SCHEMA
Support : YES
Comment : Performance Schema
Transactions : NO
XA : NO
Savepoints : NO
*************************** 2. row ***************************
Engine : InnoDB
Support : DEFAULT
Comment : Supports transactions, row-level locking, and foreign keys
Transactions : YES
XA : YES
Savepoints : YES
*************************** 3. row ***************************
Engine : MRG_MYISAM
Support : YES
Comment : Collection of identical MyISAM 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
...
本章介绍专用MySQL存储引擎的用例。它不包括默认InnoDB存储引擎或者NDB被覆盖在存储引擎InnoDB存储引擎和MySQL的NDB簇8.0。对于高级用户,它还包含对可插拔存储引擎体系结构的描述(请参见“ MySQL存储引擎体系结构概述”)。
有关商业MySQL Server二进制文件中提供的功能的信息,请参见 MySQL网站上的MySQL Editions。可用的存储引擎可能取决于您使用的MySQL版本。
有关MySQL存储引擎的常见问题的答案,请参见第A.2节“ MySQL 8.0 FAQ:存储引擎”。
MySQL 8.0支持的存储引擎
InnoDB:MySQL 8.0中的默认存储引擎。InnoDB是用于MySQL的事务安全(兼容ACID)的存储引擎,具有提交,回滚和崩溃恢复功能来保护用户数据。InnoDB行级锁定(无需升级为更粗粒度的锁定)和Oracle风格的一致非锁定读取可提高多用户并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的I / O。为了保持数据完整性,InnoDB还支持FOREIGN KEY引用完整性约束。有关更多信息InnoDB,请参见InnoDB存储引擎。MyISAM:这些表占用的空间很小。表级锁定限制了读/写工作负载中的性能,因此它通常用于Web和数据仓库配置中的只读或只读工作负载中。Memory:将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中进行快速访问。该发动机以前称为HEAP发动机。它的用例正在减少;InnoDB借助其缓冲池存储区,它提供了一种通用且持久的方式来将大多数或所有数据保留在内存中,并NDBCLUSTER为大型分布式数据集提供了快速的键值查找。CSV:其表实际上是带有逗号分隔值的文本文件。CSV表允许您以CSV格式导入或转储数据,以便与读写相同格式的脚本和应用程序交换数据。由于CSV表未建立索引,因此通常InnoDB在正常操作期间将数据保留在表中,而仅在导入或导出阶段使用CSV表。Archive:这些紧凑的,未索引的表旨在用于存储和检索大量很少参考的历史,存档或安全审核信息。Blackhole:Blackhole存储引擎可以接受但不存储数据,类似于Unix/dev/null设备。查询总是返回一个空集。这些表可用于将DML语句发送到从属服务器的复制配置中,但是主服务器不会保留其自己的数据副本。NDB(也称为NDBCLUSTER):此集群数据库引擎特别适合于需要尽可能高的正常运行时间和可用性的应用程序。Merge:使MySQL DBA或开发人员可以在逻辑上对一系列相同的MyISAM表进行分组并将它们作为一个对象引用。适用于VLDB环境,例如数据仓库。Federated:提供了链接单独的MySQL服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合于分布式或数据集市环境。Example:此引擎作为MySQL源代码中的示例,说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的“存根”。您可以使用此引擎创建表,但是不能将数据存储在表中或从表中检索数据。
您不限于对整个服务器或架构使用相同的存储引擎。您可以为任何表指定存储引擎。例如,一个应用程序可能主要使用InnoDB表,一个CSV表用于将数据导出到电子表格,而几个MEMORY表用于临时工作区。
选择存储引擎
MySQL随附的各种存储引擎在设计时都考虑了不同的用例。下表概述了MySQL随附的一些存储引擎,并在表后提供了一些说明。
存储引擎功能摘要
| 特征 | 我的ISAM | 记忆 | 创新数据库 | 封存 | 国家开发银行 |
|---|---|---|---|---|---|
| B树索引 | 是 | 是 | 是 | 没有 | 没有 |
| 备份/时间点恢复(注释1) | 是 | 是 | 是 | 是 | 是 |
| 集群数据库支持 | 没有 | 没有 | 没有 | 没有 | 是 |
| 聚集索引 | 没有 | 没有 | 是 | 没有 | 没有 |
| 压缩数据 | 是(注释2) | 没有 | 是 | 是 | 没有 |
| 资料快取 | 没有 | 不适用 | 是 | 没有 | 是 |
| 加密数据 | 是(注释3) | 是(注释3) | 是(注释4) | 是(注释3) | 是(注释3) |
| 外键支持 | 没有 | 没有 | 是 | 没有 | 是(注释5) |
| 全文搜索索引 | 是 | 没有 | 是(注释6) | 没有 | 没有 |
| 地理空间数据类型支持 | 是 | 没有 | 是 | 是 | 是 |
| 地理空间索引支持 | 是 | 没有 | 是(注释7) | 没有 | 没有 |
| 哈希索引 | 没有 | 是 | 否(注释8) | 没有 | 是 |
| 索引缓存 | 是 | 不适用 | 是 | 没有 | 是 |
| 锁定粒度 | 表 | 表 | 行 | 行 | 行 |
| MVCC | 没有 | 没有 | 是 | 没有 | 没有 |
| 复制支持(注释1) | 是 | 限量(附注9) | 是 | 是 | 是 |
| 储存限制 | 256TB | 内存 | 64TB | 没有 | 384EB |
| T树索引 | 没有 | 没有 | 没有 | 没有 | 是 |
| 交易次数 | 没有 | 没有 | 是 | 没有 | 是 |
| 更新数据字典的统计信息 | 是 | 是 | 是 | 是 | 是 |
笔记:
1.在服务器而不是在存储引擎中实现。
2.仅当使用压缩的行格式时,才支持压缩的MyISAM表。在MyISAM中使用压缩行格式的表是只读的。
3.通过加密功能在服务器中实现。
4.通过加密功能在服务器上实现;在MySQL 5.7和更高版本中,支持静态数据表空间加密。
5. MySQL Cluster NDB 7.3和更高版本提供了对外键的支持。
6. MySQL 5.6和更高版本提供了对FULLTEXT索引的InnoDB支持。
7. MySQL 5.7和更高版本提供了InnoDB对地理空间索引的支持。
8. InnoDB在内部将哈希索引用于其自适应哈希索引功能。
9.请参阅本节后面的讨论。
