MySql 中文参考指南

Chapter 18 Alternative Storage Engines

目录

存储引擎是 MySQL 组件,负责处理不同表类型的 SQL 操作。 InnoDB 是默认且最通用的存储引擎,Oracle 建议将其用于表,但专门用例除外。(MySQL 9.0 中的 CREATE TABLE 语句会默认创建 InnoDB 表。)

MySQL Server 使用可插入存储引擎架构,该架构使存储引擎可以加载到正在运行的 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: 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 存储引擎, Chapter 17, The InnoDB Storage EngineChapter 25, MySQL NDB Cluster 9.0 中介绍了该存储引擎。对于高级用户,它还包含了可插拔存储引擎架构的说明(请参阅 Section 18.11, “Overview of MySQL Storage Engine Architecture” )。

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

有关 MySQL 存储引擎的常见问题解答,请参阅 Section A.2, “MySQL 9.0 FAQ: Storage Engines”

MySQL 9.0 Supported Storage Engines

  1. InnoDB :MySQL 9.0 中的默认存储引擎。 InnoDB 是一个面向事务的安全(符合 ACID)的存储引擎,可为 MySQL 提供提交、回滚和崩溃恢复功能,以保护用户数据。 InnoDB 行级锁定(不会升级到更粗粒度的锁)和 Oracle 样式一致的非锁定读取提高了多用户并发性和性能。 InnoDB 将用户数据存储在集群索引中,以减少对基于主密钥的常见查询的 I/O。为了维护数据完整性, InnoDB 还支持 FOREIGN KEY 引用完整性约束。有关 InnoDB 的更多信息,请参阅 Chapter 17, The InnoDB Storage Engine

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

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

  4. CSV :其表实际上是带逗号分隔值的文本文件。CSV 表可让你导入或转储 CSV 格式的数据,以与读取和写入相同格式的脚本和应用程序交换数据。由于 CSV 表未编制索引,因此通常在正常操作期间将数据保存在 InnoDB 表中,并且只在导入或导出阶段使用 CSV 表。

  5. Archive :这些紧凑、未编制索引的表旨在存储和检索大量很少引用的历史、归档或安全审核信息。

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

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

  8. Merge :使 MySQL 数据库管理员或开发人员能够从逻辑上对一系列相同的 MyISAM 表进行分组,并引用它们作为单个对象。适用于数据仓库等 VLDB 环境。

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

  10. Example :此引擎作为 MySQL 源代码中的一个示例,它演示了如何开始编写新的存储引擎。它主要对开发人员感兴趣。存储引擎是一个什么都不做的“存根”。你可以在此引擎中创建表,但无法在其中存储或从中检索任何数据。

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

Choosing a Storage Engine

MySQL 提供的各种存储引擎设计时考虑到了不同的用例。下表概述了 MySQL 提供的部分存储引擎,并附有表中内容的说明。

表 18.1 存储引擎特性摘要

Feature

MyISAM

Memory

InnoDB

Archive

NDB

B-tree indexes

Yes

Yes

Yes

No

No

Backup/point-in-time recovery (note 1)

Yes

Yes

Yes

Yes

Yes

Cluster database support

No

No

No

No

Yes

Clustered indexes

No

No

Yes

No

No

Compressed data

Yes (note 2)

No

Yes

Yes

No

Data caches

No

N/A

Yes

No

Yes

Encrypted data

Yes (note 3)

Yes (note 3)

Yes (note 4)

Yes (note 3)

Yes (note 5)

Foreign key support

No

No

Yes

No

Yes

Full-text search indexes

Yes

No

Yes (note 6)

No

No

Geospatial data type support

Yes

No

Yes

Yes

Yes

Geospatial indexing support

Yes

No

Yes (note 7)

No

No

Hash indexes

No

Yes

No (note 8)

No

Yes

Index caches

Yes

N/A

Yes

No

Yes

Locking granularity

Table

Table

Row

Row

Row

MVCC

No

No

Yes

No

No

Replication support (note 1)

Yes

Limited (note 9)

Yes

Yes

Yes

Storage limits

256TB

RAM

64TB

None

384EB

T-tree indexes

No

No

No

No

Yes

Transactions

No

No

Yes

No

Yes

更新数据字典统计信息

Yes

Yes

Yes

Yes

Yes

Notes:

  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. 请参见本节后文中的讨论。