全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 6 分钟 ✍️ juanwangdev

Memory存储引擎

Memory(原名HEAP)存储引擎将数据完全存储在内存中,提供极快的访问速度。

核心特性

内存存储

SQL
CREATE TABLE session_cache (
    session_id VARCHAR(64) PRIMARY KEY,
    user_id INT,
    expire_time DATETIME
) ENGINE=MEMORY;

-- 数据完全在内存中,无磁盘IO

表级锁

SQL
-- Memory引擎使用表级锁,并发写入性能较低
INSERT INTO session_cache VALUES ('abc123', 1, NOW());

固定长度行

SQL
-- Memory引擎不支持BLOB/TEXT,VARCHAR按最大长度存储
CREATE TABLE mem_test (
    id INT PRIMARY KEY,
    name VARCHAR(100)  -- 实际占用100字节,非变长
) ENGINE=MEMORY;

索引支持

Memory引擎支持两种索引类型:

1. HASH索引(默认)

SQL
CREATE TABLE mem_hash (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    KEY idx_name (name) USING HASH
) ENGINE=MEMORY;

-- HASH索引:等值查询快,范围查询不支持
SELECT * FROM mem_hash WHERE name = 'test';  -- 快
SELECT * FROM mem_hash WHERE name > 'a';      -- 慢,全表扫描

2. BTREE索引

SQL
CREATE TABLE mem_btree (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    KEY idx_name (name) USING BTREE
) ENGINE=MEMORY;

-- BTREE索引:支持范围查询
SELECT * FROM mem_btree WHERE name > 'a';  -- 可走索引
索引类型等值查询范围查询排序
HASH✅ O(1)❌ 不支持
BTREE✅ O(log n)✅ 支持✅ 支持

数据持久性

服务重启数据丢失

SQL
-- Memory表数据在服务重启后丢失
-- 但表结构定义保留

mysql> SHOW CREATE TABLE session_cache;
-- 重启后表存在,但无数据

复制场景

SQL
-- 主从复制时,Memory表在从库重启后数据丢失
-- 需要在启动时重新初始化数据

适用场景

场景是否适合
会话缓存✅ 适合
临时数据分析✅ 适合
查询结果缓存✅ 适合
持久化存储❌ 不适合
大表存储❌ 受内存限制
高并发写入❌ 表锁限制

使用限制

SQL
-- 不支持BLOB/TEXT类型
CREATE TABLE t1 (content TEXT) ENGINE=MEMORY;  -- 报错

-- 不支持事务
START TRANSACTION;  -- 无效,每条语句自动提交

-- 单表最大受max_heap_table_size限制
SHOW VARIABLES LIKE 'max_heap_table_size';
-- 默认16MB,可调整
SET max_heap_table_size = 256*1024*1024;  -- 256MB

Memory表适合小数据量、高频访问、允许丢失的临时数据场景。

要点总结

  • Memory引擎数据全在内存,访问速度极快
  • 默认HASH索引,等值查询O(1),不支持范围查询
  • 服务重启数据丢失,仅保留表结构
  • 使用表级锁,不适合高并发写入
  • 适合会话缓存、临时数据等场景,不适合持久化存储

📝 发现内容有误?点击此处直接编辑

← 上一篇 InnoDB存储引擎
下一篇 → MyISAM存储引擎
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库