Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  Alternative Storage Engines

第18章 替代存储引擎

存储引擎是 MySQL 组件,负责处理不同表类型的 SQL 操作。InnoDB 是默认的通用存储引擎,Oracle 建议在大多数情况下使用它(在 MySQL 8.4 中,CREATE TABLE 语句将默认创建 InnoDB 表)。

MySQL 服务器使用可插拔存储引擎架构,使得存储引擎可以在运行的 MySQL 服务器中加载和卸载。

要确定您的服务器支持哪些存储引擎,请使用 SHOW ENGINES 语句。Support 列中的值指示引擎是否可用。值为 YESNODEFAULT 表示引擎可用、不可用或当前设置为默认存储引擎。

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: 支持事务、行级锁定和外键
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 3. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: identical MyISAM 表的集合
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null 存储引擎(你写入的任何内容都会消失)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM 存储引擎
Transactions: NO
          XA: NO
  Savepoints: NO
...

本章涵盖了特殊用途 MySQL 存储引擎的使用场景。它不涵盖默认的 InnoDB 存储引擎或 NDB 存储引擎,这些引擎在 第17章 Innodb存储引擎第25章 MySQL NDB Cluster 8.4 中有描述。对于高级用户,它还包含了可插拔存储引擎架构的描述(见 第18.11章 MySQL 存储引擎架构概述)。

关于商业 MySQL 服务器-binaries 中的功能,请查看 MySQL 版本,在 MySQL 网站上。可用的存储引擎可能取决于您使用的 MySQL 版本。

关于 MySQL 存储引擎的常见问题的答案,请见第A.2节,“MySQL 8.4 FAQ: Storage Engines”.

  • InnoDB: MySQL 8.4 的默认存储引擎。InnoDB 是一个事务安全(ACID compliant)的存储引擎,可以实现提交、回滚和崩溃恢复,以保护用户数据。InnoDB 使用行级锁定(不升级到更粗粒度锁定)和 Oracle 风格的一致非锁定读取来提高多用户并发性能。InnoDB 将用户数据存储在聚簇索引中,以减少基于主键的常见查询的 I/O。为了保持数据一致性,InnoDB 也支持外键约束。关于 InnoDB 的更多信息,请见第17章《Innodb存储引擎》

  • MyISAM: 这些表具有小的 footprint。 表级锁定 限制了读写工作负载的性能,因此通常用于只读或读多的工作负载配置中。

  • Memory: 将所有数据存储在 RAM 中,以便在需要快速查找非关键数据的环境中快速访问。这引擎曾经称为 HEAP 引擎。其用例正在减少;InnoDB 的缓冲池内存区域提供了通用的和可靠的方式来保持大多数或所有数据在内存中,并且 NDBCLUSTER 提供了快速的键值查找功能来处理大量分布式数据集。

  • CSV: 这些表实际上是文本文件,其中包含逗号分隔的值。CSV 表允许您将数据导入或导出到 CSV 格式,以便与读写同格式的脚本和应用程序交换数据。由于 CSV 表不支持索引,您通常在正常操作中将数据存储在 InnoDB 表中,然后在导入或导出阶段使用 CSV 表。

  • Archive: 这些紧凑、未索引的表旨在存储和检索大量的历史、存档或安全审核信息。

  • Blackhole: Blackhole 存储引擎接受但不存储数据,类似于 Unix /dev/null 设备。查询总是返回空集。这些表可以在复制配置中使用,发送 DML 语句到副本服务器,但源服务器不保存数据副本。

  • NDB (也称为NDBCLUSTER): 这款集群数据库引擎特别适用于需要最高可能的 uptime 和可用性的应用程序。

  • Merge: 允许 MySQL DBA 或开发者将一系列相同的MyISAM表逻辑组合并将其作为一个对象引用。非常适用于大规模数据仓库环境。

  • Federated: 提供了将多个物理服务器链接到一个逻辑数据库的能力。非常适用于分布式或数据仓库环境。

  • Example: 这款引擎在 MySQL 源代码中作为示例,展示了如何开始编写新的存储引擎。主要对开发者有兴趣。该存储引擎是一个stub,不能存储或检索数据。

您不需要将整个服务器或模式限制在同一个存储引擎上。您可以为任何表指定存储引擎。例如,一个应用程序可能使用大多数InnoDB表,一个CSV表用于将数据导出到电子表格,并一些MEMORY表用于临时工作区。

选择存储引擎

MySQL 提供的各种存储引擎都是为了满足不同的使用场景。以下表格提供了 MySQL 提供的存储引擎概述,以下表格后面有解释性注释。

表18.1 存储引擎功能总结

功能 MyISAM 内存 InnoDB 归档 NDB
B树索引
备份/点时恢复(注1)
集群数据库支持
聚簇索引
压缩数据 是(注2)
数据缓存 N/A
加密数据 是(注3) 是(注3) 是(注4) 是(注3) 是(注5)
外键支持
全文搜索索引 是(注6)
空间数据类型支持
空间索引支持 是(注7)
哈希索引 否(注8)
索引缓存 N/A
锁定粒度
MVCC
复制支持(注1) 有限(注9)
存储限制 256TB RAM 64TB 384EB
T树索引
事务
更新数据字典统计

注释:

1. 在服务器端实现,而不是在存储引擎中。

2. 只有在使用压缩行格式时支持压缩的MyISAM表。使用压缩行格式的MyISAM表是只读的。

3. 通过加密函数在服务器端实现。

4. 通过加密函数在服务器端实现;从MySQL 5.7开始,数据在休眠状态下支持加密。

5. 通过加密函数在服务器端实现;从NDB 8.0.22开始,加密的NDB备份;从NDB 8.0.29开始支持透明的NDB文件系统加密。

6. MySQL 5.6 及更高版本支持 FULLTEXT 索引。

7. MySQL 5.7 及更高版本支持地理空间索引。

8. InnoDB 内部使用哈希索引来实现 Adaptive Hash Index 功能。

9. 请查看本节后面的讨论。