【面试题】MySQL 的存储引擎有哪些?它们之间有什么区别?

MySQL 的主要存储引擎及区别如下:

📊 主要存储引擎对比

特性 InnoDB MyISAM MEMORY ARCHIVE CSV
事务支持 ✅ 支持(ACID) ❌ 不支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
锁粒度 行级锁 表级锁 表级锁 行级锁 表级锁
外键约束 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
MVCC ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
缓存机制 数据+索引 仅索引 内存存储 不缓存 无缓存
全文索引 ✅(5.6+)
数据压缩 ✅(只读表) ✅ 高压缩
崩溃恢复 ✅ 强 ❌ 弱 ❌ 数据丢失
存储限制 64TB 256TB 内存限制 无限制 系统限制

🔍 详细说明

1. InnoDB(默认引擎)

  • 特点:支持事务、行级锁、外键约束,具有崩溃恢复能力
  • 存储方式:数据按主键聚簇存储,.ibd文件(表空间)
  • 适用场景:OLTP系统、需要事务保证、高并发写入
-- 创建InnoDB表
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=InnoDB;

2. MyISAM

  • 特点:表级锁、不支持事务、查询速度快
  • 存储方式:三个文件:.frm(结构)、.MYD(数据)、.MYI(索引)
  • 适用场景:只读或读多写少、全文搜索、数据仓库
-- 创建MyISAM表
CREATE TABLE logs (
    id INT,
    content TEXT,
    FULLTEXT(content)
) ENGINE=MyISAM;

3. MEMORY(HEAP)

  • 特点:数据存储在内存中,重启后数据丢失
  • 适用场景:临时表、缓存、会话存储
-- 创建内存表
CREATE TABLE temp_session (
    session_id VARCHAR(32),
    data TEXT
) ENGINE=MEMORY;

4. ARCHIVE

  • 特点:高压缩比(10:1),只支持INSERT/SELECT
  • 适用场景:日志归档、历史数据存储
-- 创建归档表
CREATE TABLE historical_logs (
    log_date DATE,
    message TEXT
) ENGINE=ARCHIVE;

5. CSV

  • 特点:数据以CSV格式存储,可直接用文本编辑器查看
  • 适用场景:数据交换、导出导入
-- 创建CSV表
CREATE TABLE csv_data (
    id INT,
    value VARCHAR(100)
) ENGINE=CSV;

🎯 选择建议

选择InnoDB当:

  • 需要事务支持(银行、电商)
  • 高并发写入场景
  • 需要外键约束保证数据完整性
  • 需要崩溃后自动恢复

选择MyISAM当:

  • 表主要是只读的(报表、统计)
  • 需要全文索引(MySQL 5.6前)
  • 硬件资源有限,需要节省内存

选择其他引擎当:

  • MEMORY:需要极速访问的临时数据
  • ARCHIVE:大量历史数据归档存储
  • CSV:需要与外部系统交换数据

⚠️ 注意事项

  1. MySQL 8.0+默认只支持InnoDB,移除了对MyISAM的系统表使用
  2. 可以在同一数据库中混合使用不同引擎的表
  3. 更改引擎:ALTER TABLE table_name ENGINE = InnoDB;
  4. 可通过SHOW ENGINES;查看支持的引擎

最佳实践:大多数现代应用应使用InnoDB,除非有特殊需求。

posted @ 2025-12-19 11:08  佛祖让我来巡山  阅读(5)  评论(0)    收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网