MySQL 表类型/存储引擎

17 Mar 2025 | 6 分钟阅读

MySQL 的表类型/存储引擎是有效利用以最大化数据库性能的关键功能。它负责存储和管理数据库信息的创建、读取和更新操作。在本教程中,我们将了解 MySQL 中使用的各种存储引擎或表类型。

MySQL 支持的各种表类型/存储引擎如下:

  • ISAM
  • MyISAM
  • MERGE (合并)
  • InnoDB
  • MEMORY (HEAP)
  • ARCHIVE
  • BDB
  • CSV
  • FEDERATED

我们可以使用以下查询来确定我们的 MySQL 服务器支持哪些表类型/存储引擎。


MySQL Table Types/Storage Engines

Support 列的值表示引擎在当前服务器上是否可用。YES、NODEFAULT 表示该表类型可用、不可用,以及可用并当前设置为默认的表类型/存储引擎。

了解 MySQL 中每种表类型的特性非常重要,这将帮助我们决定最适合我们表、能够最大化数据库性能的表类型。MySQL 中的每种表类型都有其优缺点。让我们来了解每种表类型/存储引擎及其优缺点,以便选择合适的。

ISAM 表

它是Indexed Sequential Access Method 的缩写。这种表类型/存储引擎已被弃用,并从 MySQL 5.x 版本中删除。MyISAM 已取代了此表的功能。ISAM 表的大小为4 GB,需要昂贵的硬件。它不可移植。

MyISAM 表

它是 ISAM 存储引擎的扩展。MyISAM 表类型针对压缩和速度进行了优化,并且易于在系统之间移植。在 5.5 版本之前,如果我们未在创建表时指定表类型,它就是默认存储引擎。从 5.x 版本开始,InnoDB 被用作默认的表类型/存储引擎。

MyISAM 表的大小取决于操作系统,最大可达256 TB。它可以压缩成只读表,从而节省内存空间。MyISAM 表类型每张表可以存储 64 个键,最大键长度为 1024 字节。MyISAM 表工作速度非常快,但它们不是事务安全的。

MyISAM 的优点

  • 如果您是新手,最好从 MyISAM 开始,因为它设计和创建简单。
  • 在一般情况下,它比其他存储引擎更快。
  • 它提供全文索引/搜索。

MyISAM 的缺点

  • MyISAM 表不是事务安全的。
  • 它的数据完整性和崩溃恢复能力较差。
  • 当锁定整个表时,MyISAM 比 InnoDB 慢。

InnoDB 表

MySQL 中的 InnoDB 表完全支持 ACID 兼容的事务安全存储引擎。它是第一个支持外键的表类型。InnoDB 表也提供最佳性能。其大小可达64TB。InnoDB 表与 MyISAM 一样,在系统之间也是可移植的。InnoDB 表也可以在必要时通过 MySQL 进行检查和修复。

InnoDB 的优点

  • InnoDB 在处理大量数据时提供最佳性能。
  • InnoDB 表根据主键在磁盘上排列数据。

InnoDB 的缺点

  • 与 MyISAM 相比,InnoDB 表占用更多磁盘空间。

MERGE 表

MERGE 表也称为MRG_MyISAM。此表将具有相似结构的多个 MyISAM 表(具有相同的列和索引信息以及相同的顺序)合并到一个表中。此表使用组件表的索引,因为它没有自己的索引。当连接多个表时,它还可以用于提高数据库性能。我们只能对 MERGE 表执行 INSERT、SELECT、DELETE 和 UPDATE 操作。如果我们在此存储引擎中使用DROP TABLE 查询,MySQL 只会删除 MERGE 规范,而不会影响底层表。

MERGE 的优点

  • 此表的主要优点是消除了 MyISAM 表的大小限制。
  • 它执行更高效的搜索和修复。
  • 它易于管理日志表集。

MERGE 的缺点

  • MySQL 只允许我们为 MERGE 表使用完全相同的(相似结构)MyISAM 表。
  • 它不支持所有 MyISAM 功能,例如我们不能在 MERGE 表上创建 FULLTEXT 索引。
  • 它读取索引的速度较慢。

Memory 表

Memory 表类型/存储引擎创建将存储在内存中的表。在 MySQL 4.1 版本之前,它也称为HEAP。此表类型比 MyISAM 快,因为它使用哈希索引,可以更快地检索结果。我们已经知道存储在内存中的数据可能会因电源问题或硬件故障而丢失。因此,我们只能将此表用作临时工作区域,或者用于从其他表中读取数据的只读缓存。因此,每当 MySQL 服务器停止或重新启动时,内存/堆表都会丢失。内存/堆表的数据生命取决于数据库服务器的运行时间。

Memory 的优点

此表类型的主要优点是其速度非常快。这是因为它使用了哈希索引,可以更快地检索结果。

Memory 的缺点

由于电源故障或硬件崩溃,数据会轻易丢失,因此不建议长期使用 MEMORY 存储。

CSV 表

CSV 表类型/存储引擎将数据以逗号分隔值(CSV)格式存储在文件中。它提供了一种将数据迁移到许多不同软件包(如电子表格软件)的便捷方式。这种表类型不像通用数据库引擎那么好,但它使我们能够最有效地和轻松地交换数据。此外,它会在读取操作期间扫描整个表。

CSV 的优点

当我们需要将复杂数据从一个应用程序导出到 CSV 文件,然后再导入到另一个应用程序时,此表类型/存储引擎非常有用。

CSV 的缺点

  • 不适合存储大量数据或 BLOB 等大型数据类型,尽管这些类型是支持的。
  • 由于没有索引,数据检索速度很慢。

FEDERATED 表

FEDERATED 表类型/存储引擎从 5.03 版本开始支持 MySQL,它允许在不使用集群/复制技术的情况下访问远程 MySQL 服务器的数据。位于本地存储中的 federated 存储引擎不存储任何数据。如果我们查询存储在本地内存中的 federated 表中的数据,MySQL 会自动从远程 federated 表中提取数据。需要注意的是,这是服务器访问远程数据库的一种方式,而不是客户端。它是整合来自一个以上主机的数据或在不使用数据导入导出方法的情况下将数据从远程数据库复制到本地表的有效方法。

ARCHIVE 表

这种表类型/存储引擎允许我们以压缩格式存储大量数据节省磁盘空间,并且不可修改。因此,它是存储不再使用的日志数据(例如旧的发票或销售数据)的理想存储引擎。它在插入时压缩数据,并可以使用 Zlib 库对其进行解压缩。

archive 表仅支持 INSERTSELECT 查询。它不支持大多数数据类型,例如索引数据类型,因此我们需要扫描整个表来读取行。

由于它以压缩格式存储信息,如果我们想读取表,我们首先需要解压缩信息。这个过程将花费时间来执行复杂的搜索和检索。因此,如果我们必须在这些表上执行大量查询,最好使用 MyISAM 等其他表。

BDB 表

BDB 是Berkeley DB engine 的缩写,由 SleepyCat 软件开发。它在事务安全性方面与 InnoDB 类似。它基于哈希存储机制,使得信息恢复非常快。它支持页面级锁定,但数据文件不可移植。


下一主题MySQL Explain