Skip to content

Memory存储引擎


Memory(旧称 HEAP)是 MySQL 提供的一种基于内存的存储引擎
它将所有数据存放在内存中,因此读写速度极快,非常适合需要快速访问的临时数据或中间计算结果。
但由于数据仅存在于内存中,服务器重启或崩溃后,数据会丢失

Memory 表只会在磁盘上保存表结构定义文件,不会保存数据文件。

文件类型后缀名说明
表结构定义.frm存储表结构定义(字段、索引等)
数据所有数据存储在内存中,不在磁盘上持久化

Memory 引擎支持两种索引结构:

索引类型描述
HASH 索引(默认)基于哈希表结构,查找速度极快;适用于等值查询(=IN()
BTREE 索引可支持范围查询(<, >, BETWEEN, ORDER BY

示例:

CREATE TABLE t_mem (
id INT PRIMARY KEY,
name VARCHAR(30),
age INT,
KEY idx_name (name) USING HASH
) ENGINE=MEMORY;

也可以手动指定使用 BTREE:

CREATE TABLE t_mem_btree (
id INT PRIMARY KEY,
score INT,
KEY idx_score (score) USING BTREE
) ENGINE=MEMORY;
  • HASH 索引基于哈希表实现(Key → Row Pointer)

  • 叶子节点直接保存数据行的内存地址

  • 不支持前缀索引(Partial Key Index)

  • 不支持全文索引(FULLTEXT)与空间索引(SPATIAL)

Memory 表中的每一行数据都存放在内存中。
默认使用 固定长度(Fixed-Length) 格式存储,因此:

  • VARCHAR 字段会被转换为 CHAR 类型;

  • 表的记录长度固定;

  • 操作效率高,但会浪费一定内存空间。

特性支持情况
锁机制表级锁(无行锁)
事务❌ 不支持
外键约束❌ 不支持
并发性一般,写操作会锁表
崩溃恢复数据全部丢失(仅保留结构)
限制项说明
数据易失性MySQL 重启后数据丢失
存储大小受系统内存限制,由参数 max_heap_table_size 控制
列类型限制不支持 BLOBTEXT 类型
并发锁仅支持表级锁
字符串比较大小写敏感性依赖字符集和排序规则(collation)
场景说明
临时表用于存储中间结果(如排序、汇总计算)
会话缓存存储会话级、连接级中间状态数据
高速查找表如字典映射表、黑名单表、验证码表
不适合存储持久业务数据或大数据量表
项目MemoryMyISAMInnoDB
数据存储位置内存磁盘(.MYD)磁盘(聚簇索引)
默认索引类型HASHB+TreeB+Tree
事务支持
锁粒度表级表级行级
持久性数据丢失数据持久数据持久
适用场景临时、快速缓存读多写少高并发事务系统

Memory 引擎核心特征:

  • 数据完全存放在内存中,速度最快;

  • 默认使用 HASH 索引;

  • 仅支持表级锁,不支持事务与外键;

  • 重启后数据丢失,仅保留表结构;

  • 适合临时计算、快速缓存、会话数据等高性能场景。