MySQL 存储引擎概览

MySQL存储引擎(Storage Engine)决定了数据如何存储、索引如何组织、事务是否支持、锁的粒度、崩溃恢复能力等,是数据库性能与可靠性的核心。


一、常见存储引擎对比(重点)

1. InnoDB(默认 / 首选)

特性

  • 支持事务(ACID)
  • 行级锁(并发能力强)
  • 支持外键
  • 崩溃恢复(redo / undo log)
  • 聚簇索引(数据即索引)

适用场景

  • 业务系统(ERP / 电商 / 金融)
  • 高并发写入
  • 对一致性、可靠性要求高

关键词(面试高频)

  • MVCC
  • Redo Log / Undo Log
  • 行锁 vs 间隙锁
  • Buffer Pool

2. MyISAM(已逐渐淘汰)

特性

  • 不支持事务
  • 表级锁
  • 读性能好
  • 表损坏风险高
  • 数据与索引分离(MYD / MYI)

适用场景

  • 只读或读多写少
  • 历史系统、统计类查询

MySQL 8.x 中已不推荐使用


3. Memory(内存表)

特性

  • 数据存放在内存
  • 默认 Hash 索引(也支持 B-Tree)
  • 重启即丢数据
  • 表级锁

适用场景

  • 临时表
  • 高速缓存表
  • 中间计算结果

4. Archive(归档引擎)

特性

  • 高压缩比
  • 只支持 INSERT / SELECT
  • 不支持索引(除自增)

适用场景

  • 日志归档
  • 审计数据
  • 历史冷数据

5. CSV

特性

  • 数据以 CSV 文件形式存储
  • 无索引、无事务

适用场景

  • 与外部系统做数据交换
  • ETL 中转

二、核心差异对比表

特性 InnoDB MyISAM Memory Archive
事务
锁粒度 行锁 表锁 表锁 行锁
崩溃恢复
外键
索引结构 B+Tree(聚簇) B+Tree Hash / B+Tree
默认引擎

三、如何查看和设置存储引擎

查看当前支持的引擎

sql 复制代码
SHOW ENGINES;

查看表的存储引擎

sql 复制代码
SHOW TABLE STATUS WHERE Name = 'user';

建表时指定引擎

sql 复制代码
CREATE TABLE user (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50)
) ENGINE=InnoDB;

四、选型建议(实战经验)

  • 99% 的业务表:InnoDB
  • 缓存 / 临时数据:Memory
  • 日志 / 历史数据:Archive
  • 不要在新系统使用 MyISAM

五、面试一句话总结

InnoDB 是 MySQL 的事实标准存储引擎,核心优势是事务、行锁、MVCC 和高可靠性;其他引擎只在特定场景使用。


相关推荐
SL_staff30 分钟前
JVS数字底座实践:如何复用企业文档能力快速构建知识类应用
java·数据库·程序员
技术长镜头1 小时前
别再死记 Record、Gap、Next-Key:沿一条 SQL 看懂 InnoDB 锁
后端·mysql
农村小镇哥1 小时前
C#读取CSV文件的方法
服务器·数据库·c#
IMPYLH1 小时前
HTML 的 <embed> 元素
前端·数据库·html
油丶酸萝卜别吃2 小时前
Redis 布隆过滤器快速实现
数据库·redis·缓存
深念Y2 小时前
stable-diffusion.cpp 的 FLUX.2 Klein 9B 分步
java·前端·数据库
whn19772 小时前
oracle 的ora-19633处理
数据库·oracle
x-cmd2 小时前
用 Rust 打造 AI 时代的 SQL:把重复任务变成可执行文件
数据库·人工智能·sql·ai·容器·rust·workflow
小弥儿2 小时前
Firecrawl:把整个网页变成 AI 可查询的数据库
数据库·人工智能·学习
swordbob2 小时前
mysql数据库,明明有索引为啥不用
数据库·mysql