This is a read-only copy of the MariaDB Knowledgebase generated on 2024-12-22. For the latest, interactive version please visit https://mariadb.com/kb/.

MEMORY存储引擎

MEMORY 存储引擎(以前称为 HEAP)的内容存储在内存中,而不是磁盘上。

它最适合用于其他表的只读缓存数据或临时工作区。

由于数据存储在内存中,因此极易受到停电或硬件故障的影响,不适合永久数据存储。实际上,在服务器重新启动后,MEMORY 表将被重新创建(因为定义文件存储在磁盘上),但它们将为空。可以使用带有 --init-file 服务器启动选项的查询重新填充它们。

可在 MEMORY 表中使用可变长度类型,如 VARCHAR。MEMORY 表不支持 BLOBTEXT 列。

内存使用

MEMORY 表的最大总大小不能超过 max_heap_table_size 系统服务器变量。创建表时,此值适用于该表,重新启动服务器时,此值适用于现有表。更改此值不会影响现有表。但是,执行 ALTER TABLE ... ENGINE=MEMORY 语句将当前的 max_heap_table_size 值应用于该表。此外,可以在创建表之前更改 max_heap_table_size 会话值,以确保不会影响其他会话创建的表。

MAX_ROWS 表选项提供有关您计划在其中存储的行数的提示。这不是无法超过的硬限制,并且不允许超过 max_heap_table_size。存储引擎使用 max_heap_table_size 和 MAX_ROWS 来计算可为表分配的最大内存。

为 MEMORY 表分配的内存通过运行 DROP TABLETRUNCATE TABLE 或使用 ALTER TABLE tbl_name ENGINE = MEMORY 重建来释放。删除行时,空间不会自动释放。

索引类型

MEMORY 存储引擎允许索引为 B 树或哈希。哈希是 MEMORY 的默认类型。有关其特征,请参见存储引擎索引类型

MEMORY 表最多可以具有 64 个索引,每个索引最多 16 列,最大键长度为 3072 字节。

复制

在服务器重新启动时,MEMORY 表会丢失。为了在复制中实现此结果,主服务器在重新启动后第一次使用 MEMORY 表时,会向二进制日志中写入该表的 DELETE 语句,以便副本也被清空。

示例

以下示例显示如何创建具有给定最大大小的 MEMORY 表,如上所述。

SET max_heap_table_size = 1024*516;

CREATE TABLE t (a VARCHAR(10), b INT) ENGINE = MEMORY;

SET max_heap_table_size = @@max_heap_table_size;

另请参阅

Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.