Skip to content

Archive / CSV / Memory 引擎

Archive 引擎

Archive 是 MySQL 的「归档引擎」,专门用于存储大量历史数据,写入速度极快,存储空间极小。

特点

特性说明
压缩存储Zlib 压缩,比 InnoDB 小 5~10 倍
只支持 INSERT / SELECT不能 UPDATE / DELETE
无索引(除自增主键)全表扫描
行级锁INSERT 支持并发
事务支持❌ 不支持

使用场景

sql
-- 存储日志、审计记录、历史数据
CREATE TABLE audit_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    action VARCHAR(100),
    user_id BIGINT,
    created_at DATETIME
) ENGINE=Archive;

-- 批量导入日志(写入速度极快)
LOAD DATA INFILE '/data/audit_2024.csv' INTO TABLE audit_log;

Archive vs 普通表的性能对比

操作ArchiveInnoDB
批量 INSERT极快(压缩)
SELECT(全表)慢(解压)
存储空间极小中等
UPDATE/DELETE❌ 不支持✅ 支持

CSV 引擎

CSV 引擎以 CSV 格式存储数据,可以直接用 Excel 打开。

特点

特性说明
文本格式数据以逗号分隔存储
直接编辑可用 Excel / 文本编辑器打开
无索引全表扫描
事务支持❌ 不支持
文件共享多个 MySQL 实例可同时读

使用场景

sql
CREATE TABLE report_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    month VARCHAR(7),
    revenue DECIMAL(12,2),
    cost DECIMAL(12,2)
) ENGINE=CSV;

-- 文件格式(可直接用 Excel 打开)
-- /var/lib/mysql/app_db/report_data.CSV
-- id,month,revenue,cost
-- 1,2024-01,100000.00,60000.00

注意事项

  • CSV 文件不能有空值NULL 要用 \N 表示)
  • CSV 文件不能包含中文逗号(需要转义)
  • 多个 MySQL 实例同时写入会导致文件损坏

Memory 引擎

Memory 引擎把数据存储在内存中,读写速度极快,但断电后数据丢失。

特点

特性说明
存储位置内存(tmpfs 或 RAM)
读写速度极快(微秒级)
数据持久化❌ 断电丢失
索引类型HASH(默认)或 BTREE
固定长度所有列用固定长度存储
大小限制max_heap_table_size 控制

使用场景

sql
-- 临时表(MySQL 内部自动使用)
-- 用于 GROUP BY、ORDER BY 的临时排序
CREATE TEMPORARY TABLE temp_session (
    session_id VARCHAR(64),
    user_id BIGINT,
    last_active DATETIME
) ENGINE=Memory;

-- 热点数据缓存
CREATE TABLE hot_users (
    user_id BIGINT PRIMARY KEY,
    nickname VARCHAR(50),
    last_login DATETIME
) ENGINE=Memory;

-- 等值查询性能极好(HASH 索引)
SELECT * FROM hot_users WHERE user_id = 12345;

Memory 引擎的坑

sql
-- 坑一:VARCHAR 被当作固定长度存储
-- 实际占用 255 字节,不是实际字符串长度
CREATE TABLE t (
    name VARCHAR(255)  -- 实际占 255 字节
) ENGINE=Memory;

-- 坑二:断电数据全丢
-- Memory 表不会写入磁盘

-- 坑三:最大行数受 max_heap_table_size 限制
SHOW VARIABLES LIKE 'max_heap_table_size';  -- 默认 16MB

-- 坑四:HASH 索引不支持范围查询
-- SELECT * FROM t WHERE id > 100; -- 无法使用索引,全表扫描

其他引擎

NDB Cluster 引擎

MySQL Cluster 专用引擎,支持分布式存储和高可用:

sql
CREATE TABLE t (
    id INT PRIMARY KEY
) ENGINE=ndbcluster;

Federated 引擎

跨服务器查询,类似 Linked Server(SQL Server)或 DBLink(Oracle):

sql
-- 启用 Federated 引擎
INSTALL PLUGIN federated SONAME 'ha_federatedx.so';

CREATE TABLE remote_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=Federated
CONNECTION='mysql://user:pass@host:3306/db/remote_table';

不推荐在生产环境使用 Federated,延迟高且不稳定。

引擎选择总表

场景推荐引擎原因
通用业务表InnoDB事务、并发、可靠性
只读报表MyISAM / InnoDB按需选择
历史归档Archive压缩存储
临时计算Memory内存速度
日志导入Archive写入速度
数据共享(Excel)CSV文件格式
高可用集群NDB分布式
跨服务器查询Federated不推荐

下一步

MySQL 高级特性(基础)部分全部完成。接下来进入 索引与性能优化——这是 MySQL 最核心的技能之一。

基于 VitePress 构建