第 15 章备用存储引擎

目录

存储引擎是 MySQL 组件,用于处理不同 table 类型的 SQL 操作。 InnoDB是默认的且用途最广的存储引擎,Oracle 建议将其用于 table(特殊用例除外)。 (默认情况下,MySQL 5.7 中的CREATE TABLE语句创建InnoDBtable。)

MySQL Server 使用可插拔的存储引擎体系结构,该体系结构使存储引擎可以加载到正在运行的 MySQL 服务器或从正在运行的 MySQL 服务器上卸载。

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

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 存储引擎的用例。它不涵盖第 14 章,InnoDB 存储引擎第 21 章,MySQL NDB 群集 7.5 和 NDB 群集 7.6中涵盖的默认InnoDB存储引擎或NDB存储引擎。对于高级用户,本章还包含对可插拔存储引擎体系结构的说明(请参见第 15.11 节“ MySQL 存储引擎体系结构概述”)。

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

有关 MySQL 存储引擎的常见问题的答案,请参见第 A.2 节“ MySQL 5.7 FAQ:存储引擎”

MySQL 5.7 支持的存储引擎

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

  • MyISAM:这些桌子的空间很小。 Table-level locking限制了读/写工作负载的性能,因此通常在 Web 和数据仓库配置中的只读或大部分工作负载中使用。

  • Memory:将所有数据存储在 RAM 中,以便在需要快速查找非关键数据的环境中快速访问。该引擎以前称为HEAP引擎。它的用例正在减少; InnoDB及其缓冲池内存区域提供了一种通用且持久的方式来将大多数或所有数据保留在内存中,而NDBCLUSTER提供了针对大型分布式数据集的快速键值查找。

  • CSV:它的 table 实际上是带有逗号分隔值的文本文件。 CSVtable 使您可以导入或转储 CSV 格式的数据,以便与读取和写入相同格式的脚本和应用程序交换数据。由于 CSVtable 未构建索引,因此通常在正常操作期间将数据保存在InnoDBtable 中,并且仅在导入或导出阶段使用 CSVtable。

  • Archive:这些紧凑的未索引 table 旨在用于存储和检索大量很少参考的历史,归档或安全审核信息。

  • Blackhole:Blackhole 存储引擎可以接受但不存储数据,类似于 Unix /dev/null设备。查询总是返回一个空集。这些 table 可用于将 DML 语句发送到从属服务器的复制配置中,但是主服务器不会保留其自己的数据副本。

  • NDB(也称为NDBCLUSTER):此群集数据库引擎特别适合要求尽可能高的正常运行时间和可用性的应用程序。

  • Merge:使 MySQL DBA 或开发人员可以在逻辑上对一系列相同的MyISAMtable 进行分组并将它们作为一个对象引用。适用于 VLDB 环境,例如数据仓库。

  • Federated:提供了链接单独的 MySQL 服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合于分布式或数据集市环境。

  • Example:此引擎用作 MySQL 源代码中的示例,该示例说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的“存根”。您可以使用此引擎创建 table,但是不能在其中存储数据或从中检索数据。

您不限于对整个服务器或架构使用相同的存储引擎。您可以为任何 table 指定存储引擎。例如,应用程序可能主要使用InnoDBtable,其中一个CSVtable 用于将数据导出到电子 table 格,而少数MEMORYtable 用于临时工作空间。

选择存储引擎

MySQL 随附的各种存储引擎在设计时都考虑了不同的用例。下 table 概述了 MySQL 随附的一些存储引擎,并在 table 后提供了一些说明。

table15.1 存储引擎功能摘要

FeatureMyISAMMemoryInnoDBArchiveNDB
B-tree indexesYesYesYesNoNo
备份/时间点恢复 (Comments1)YesYesYesYesYes
集群数据库支持NoNoNoNoYes
Clustered indexesNoNoYesNoNo
Compressed data是(Comments2)NoYesYesNo
Data cachesNoN/AYesNoYes
Encrypted data是(Comments3)是(Comments3)是(Comments4)是(Comments3)是(Comments3)
外键支持NoNoYesNo是(Comments5)
全文搜索索引YesNo是(Comments6)NoNo
地理空间数据类型支持YesNoYesYesYes
地理空间索引支持YesNo是(Comments7)NoNo
Hash indexesNoYes否(Comments8)NoYes
Index cachesYesN/AYesNoYes
Locking granularityTableTableRowRowRow
MVCCNoNoYesNoNo
复制支持 (Comments1)Yes限量(附注 9)YesYesYes
Storage limits256TBRAM64TBNone384EB
T-tree indexesNoNoNoNoYes
TransactionsNoNoYesNoYes
更新数据字典的统计信息YesYesYesYesYes

Notes:

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

2.仅在使用压缩行格式时才支持压缩 MyISAMtable。在 MyISAM 中使用压缩行格式的 table 是只读的。

3.通过加密功能在服务器中实现。

4.通过加密功能在服务器中实现;在 MySQL 5.7 和更高版本中,支持静态数据 table 空间加密。

  1. MySQL Cluster NDB 7.3 和更高版本提供了对外键的支持。

  2. MySQL 5.6 和更高版本提供了对 FULLTEXT 索引的 InnoDB 支持。

  3. MySQL 5.7 和更高版本提供了 InnoDB 对地理空间索引的支持。

  4. InnoDB 在内部将哈希索引用于其自适应哈希索引功能。

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