> For the complete documentation index, see [llms.txt](https://hezhiqiang-book.gitbook.io/mysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hezhiqiang-book.gitbook.io/mysql/di-yi-zhang/index-10/biao-lei-xing.md).

# 11.2 MySQL 表类型

在本教程中，您将学习各种MySQL表类型或存储引擎。了解MySQL中每个表类型的功能至关重要，以便您可以有效地使用它们来最大限度地提高数据库的性能。

MySQL为其表提供了各种存储引擎，它们分别如下所示：

* MyISAM
* InnoDB
* MERGE
* MEMORY(HEAP)
* ARCHIVE
* CSV
* FEDERATED

每个存储引擎都有自己的优点和缺点。了解每个存储引擎功能至关重要，并为表选择最合适的功能，以最大限度地提高数据库的性能。 在以下部分中，我们将讨论每个存储引擎及其功能，以便您可以决定使用哪个引擎合适。

## MyISAM

*MyISAM*扩展了以前的*ISAM*存储引擎。 *MyISAM*表针对压缩和速度进行了优化。 *MyISAM*表也可以在平台和操作系统之间移植。

*MyISAM*表的大小可达`256TB`，这个数据里是非常巨大的。 此外，MyISAM表可以压缩为只读表以节省空间。 在启动时，MySQL会检查*MyISAM*表是否有损坏，甚至在出现错误的情况下修复它们。*MyISAM*表不是事务安全的。

在*MySQL 5.5*之前，*MyISAM*是创建表但是不用明确指定存储引擎时的默认存储引擎。 从版本*5.5*起，MySQL使用*InnoDB*作为默认存储引擎。

## InnoDB

*InnoDB*表完全支持符合ACID和事务。 它们也是性能最佳的。*InnoDB*表支持外键，提交，回滚，前滚操作。*InnoDB*表的大小最多可达`64TB`。

像MyISAM一样，*InnoDB*表可以在不同的平台和操作系统之间移植。如果需要，MySQL还会在启动时检查和修复*InnoDB*表。

## MERGE

*MERGE*表是将具有相似结构的多个MyISAM表组合到一个表中的虚拟表。*MERGE*存储引擎也被称为*MRG\_MyISAM*引擎。 *MERGE*表没有自己的索引; 它会使用组件表的索。

使用*MERGE*表，可以在[连接多个表](http://www.yiibai.com/mysql/inner-join.html)时加快性能。MySQL只允许您对*MERGE*表执行[SELECT](http://www.yiibai.com/mysql/select-statement-query-data.html)，[DELETE](http://www.yiibai.com/mysql/delete-statement.html)，[UPDATE](http://www.yiibai.com/mysql/update-data.html)和[INSERT](http://www.yiibai.com/mysql/insert-statement.html)操作。如果在`MERGE`表上使用`DROP TABLE`语句，则仅删除`MERGE`规范。基础表不会受到影响。

## Memory

内存表存储在内存中，并使用散列索引，使其比*MyISAM*表格快。内存表数据的生命周期取决于数据库服务器的正常运行时间。内存存储引擎以前称为*HEAP*。

## Archive

归档存储引擎允许将大量用于归档目的的记录存储为压缩格式以节省磁盘空间。 归档存储引擎在插入时压缩记录，并在读取时使用`zlib`库对其进行解压缩。

归档表只允许[INSERT](http://www.yiibai.com/mysql/insert-statement.html)和`SELECT`语句。 `ARCHIVE`表不支持索引，因此需要完整的表扫描来读取行。

## CSV

CSV存储引擎以逗号分隔值(CSV)文件格式存储数据。 CSV表格提供了将数据迁移到非SQL应用程序(如电子表格软件)中的便捷方式。

CSV表不支持`NULL`数据类型。 此外，读操作需要全表扫描。

## FEDERATED

*FEDERATED*存储引擎允许从远程MySQL服务器管理数据，而无需使用集群或复制技术。本地联合表不存储任何数据。 从本地联合表查询数据时，数据将从远程联合表自动拉出。

## 选择MySQL表类型

您可以根据各种条件下载以下清单以选择最合适的存储引擎或表类型。请查看以下PDF文件，了解它们之间的区别： <http://www.yiibai.com/downloads/mysql/engines-feature.pdf>

在本教程中，您已经学习了MySQL中可用的各种存储引擎或表类型。
