## 16.5 ARCHIVE 存储引擎

[](<>)[](<>)

这`档案`存储引擎生成专用表，在很小的空间内存储大量未索引的数据。

[](<>)

**表 16.5 ARCHIVE 存储引擎功能**

| 特征 | 支持 |
| --- | --- |
| **B树索引** | 不 |
| **备份/时间点恢复**（在服务器中实现，而不是在存储引擎中。） | 是的 |
| **集群数据库支持** | 不 |
| **聚集索引** | 不 |
| **压缩数据** | 是的 |
| **数据缓存** | 不 |
| **加密数据** | 是（通过加密功能在服务器中实现。） |
| **外键支持** | 不 |
| **全文检索索引** | 不 |
| **地理空间数据类型支持** | 是的 |
| **地理空间索引支持** | 不 |
| **哈希索引** | 不 |
| **索引缓存** | 不 |
| **锁定粒度** | 排 |
| **MVCC** | 不 |
| **复制支持**（在服务器中实现，而不是在存储引擎中。） | 是的 |
| **存储限制** | 没有 |
| **T-树索引** | 不 |
| **交易** | 不 |
| **更新数据字典的统计信息** | 是的 |

这`档案`存储引擎包含在 MySQL 二进制发行版中。如果您从源代码构建 MySQL，要启用此存储引擎，请调用**制作**与[`-DWITH_ARCHIVE_STORAGE_ENGINE`](source-configuration-options.html#option_cmake_storage_engine_options)选项。

检查源`档案`发动机，看看`存储/归档`MySQL 源代码分发的目录。

您可以检查是否`档案`存储引擎可与[`显示引擎`](show-engines.html)陈述。

当你创建一个`档案`表，存储引擎创建名称以表名开头的文件。数据文件的扩展名为`.ARZ`.一个`.ARN`文件可能会在优化操作期间出现。

这`档案`发动机支架[`插入`](insert.html),[`代替`](replace.html)， 和[`选择`](select.html)， 但不是[`删除`](delete.html)要么[`更新`](update.html).它确实支持`订购方式`操作，[`斑点`](blob.html)列和空间数据类型（请参阅[第 11.4.1 节，“空间数据类型”](spatial-type-overview.html)）。不支持地理空间参考系统。这`档案`引擎使用行级锁定。

这`档案`引擎支持`自动递增`列属性。这`自动递增`列可以有唯一或非唯一索引。尝试在任何其他列上创建索引会导致错误。这`档案`引擎还支持`自动递增`表选项在[`创建表`](create-table.html)语句分别指定新表的初始序列值或重置现有表的序列值。

`档案`不支持将值插入`自动递增`列小于当前最大列值。尝试这样做会导致[`ER_DUP_KEY`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_dup_key)错误。

这`档案`引擎忽略[`斑点`](blob.html)如果没有请求它们，则在阅读时扫描它们。

这`档案`存储引擎不支持分区。

**贮存：**行在插入时被压缩。这`档案`发动机用途`zlib`无损数据压缩（见<http://www.zlib.net/>）。您可以使用[`优化表`](optimize-table.html)分析表格并将其打包成更小的格式（出于使用的原因[`优化表`](optimize-table.html)，见本节后面）。该引擎还支持[`检查表`](check-table.html).使用了几种类型的插入：

-   一个[`插入`](insert.html)语句只是将行推入压缩缓冲区，并根据需要刷新该缓冲区。插入缓冲区受锁保护。一种[`选择`](select.html)强制冲洗发生。

-   批量插入仅在完成后才可见，除非同时发生其他插入，在这种情况下可以部分看到它。一种[`选择`](select.html)除非在加载时发生正常插入，否则绝不会导致批量插入刷新。

**恢复**：检索时，行按需解压缩；没有行缓存。一种[`选择`](select.html)操作执行完整的表扫描：当一个[`选择`](select.html)发生时，它会找出当前可用的行数并读取该行数。[`选择`](select.html)作为一致读取执行。请注意，很多[`选择`](select.html)插入期间的语句会降低压缩性能，除非只使用批量插入。为了实现更好的压缩，您可以使用[`优化表`](optimize-table.html)要么[`维修台`](repair-table.html).中的行数`档案`报告的表格[`显示表状态`](show-table-status.html)总是准确的。看[第 13.7.3.4 节，“优化 TABLE 语句”](optimize-table.html),[第 13.7.3.5 节，“REPAIR TABLE 语句”](repair-table.html)， 和[第 13.7.7.38 节，“SHOW TABLE STATUS 语句”](show-table-status.html).

### 其他资源

-   一个专门的论坛`档案`存储引擎可在<https://forums.mysql.com/list.php?112>.
