MEMORY存储引擎
MEMORY 存储引擎(以前称为 HEAP)的内容存储在内存中,而不是磁盘上。
它最适合用于其他表的只读缓存数据或临时工作区。
由于数据存储在内存中,因此极易受到停电或硬件故障的影响,不适合永久数据存储。实际上,在服务器重新启动后,MEMORY
表将被重新创建(因为定义文件存储在磁盘上),但它们将为空。可以使用带有 --init-file 服务器启动选项的查询重新填充它们。
可在 MEMORY 表中使用可变长度类型,如 VARCHAR。MEMORY 表不支持 BLOB 或 TEXT 列。
内存使用
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 TABLE 或 TRUNCATE 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;