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 和高可靠性;其他引擎只在特定场景使用。


相关推荐
hx862279 小时前
Java MySQL 连接
java·mysql·adb
Nturmoils9 小时前
从「亡羊补牢」到「规则先行」:金仓数据库 SQL 防火墙实战解析
数据库·后端
星空露珠9 小时前
迷你世界UGC3.0脚本Wiki全局函数
开发语言·数据库·算法·游戏·lua
湛生9 小时前
NoSQL注入
数据库·安全·web安全·网络安全·nosql
zzh940779 小时前
MySQL中的通配符
数据库·mysql
gameboy0319 小时前
MySQL:基础操作(增删查改)
数据库·mysql·oracle
yoyo_zzm9 小时前
MySQL的索引
android·数据库·mysql
未来龙皇小蓝9 小时前
【MySQL-索引调优】06:最左匹配原则及优化
数据库·mysql·oracle·性能优化
一个有温度的技术博主10 小时前
Redis系列三:在linux上安装Redis
linux·数据库·redis
changhong198610 小时前
redis批量删除namespace下的数据
数据库·redis·缓存