Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Alternative Storage Engines

第 18 章 替代存储引擎

存储引擎是 MySQL 的组件,负责处理不同表类型的 SQL 操作。InnoDB 是默认的通用存储引擎,Oracle 建议除非有特殊用例,否则使用它来创建表。(MySQL 8.3 中的 CREATE TABLE 语句默认创建 InnoDB 表。)

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

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

mysql> 显示引擎\G
*************************** 1. 行 ***************************
      引擎: PERFORMANCE_SCHEMA
     支持: 是
     注释: 性能模式
事务: 否
          XA: 否
  保存点: 否
*************************** 2. 行 ***************************
      引擎: InnoDB
     支持: 默认
     注释: 支持事务、行级锁定和外键
事务: 是
          XA: 是
  保存点: 是
*************************** 3. 行 ***************************
      引擎: MRG_MYISAM
     支持: 是
     注释: 相同的 MyISAM 表集合
事务: 否
          XA: 否
  保存点: 否
*************************** 4. 行 ***************************
      引擎: BLACKHOLE
     支持: 是
     注释: /dev/null 存储引擎(你写入的任何内容都会消失)
事务: 否
          XA: 否
  保存点: 否
*************************** 5. 行 ***************************
      引擎: MyISAM
     支持: 是
     注释: MyISAM 存储引擎
事务: 否
          XA: 否
  保存点: 否
...

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

有关商业 MySQL 服务器二进制文件中提供的功能信息,请参阅 MySQL 版本,在 MySQL 网站上。可用的存储引擎可能取决于您使用的 MySQL 版本。

有关 MySQL 存储引擎的常见问题的答案,请参阅 附录 A.2,《MySQL 8.3 FAQ:存储引擎》

MySQL 8.3 支持的存储引擎

  • InnoDB:MySQL 8.3 中的默认存储引擎。InnoDB 是一个事务安全(ACID 兼容)的存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。InnoDB 行级锁定(无需升级到粗粒度锁)和 Oracle 风格的一致非锁定读取提高了多用户并发性和性能。InnoDB 将用户数据存储在聚簇索引中,以减少常见查询的 I/O。InnoDB 还支持 FOREIGN KEY 参考完整性约束。有关 InnoDB 的更多信息,请参阅 第 17 章,《InnoDB 存储引擎》

  • MyISAM:这些表具有小型 footprint。表级锁定 限制了读写工作负载的性能,因此通常用于只读或主要读取的 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 服务器链接在一起以创建一个逻辑数据库的能力。非常适合分布式或数据 mart 环境。

  • Example:该引擎在 MySQL 源代码中作为示例,展示了如何开始编写新的存储引擎。它主要对开发人员感兴趣。该存储引擎是一个 stub,不执行任何操作。您可以创建该引擎的表,但不能在其中存储或检索数据。

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

选择存储引擎

MySQL 提供的各种存储引擎都是为了满足不同的使用场景。下表提供了 MySQL 中一些存储引擎的概述,随后的注释将在表格后面。

表 18.1 存储引擎功能摘要

功能 MyISAM Memory InnoDB Archive 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 内部使用哈希索引来实现自适应哈希索引功能。

9. 请参阅本节后面的讨论。