只知道InnoDB、MyISAM ,MySQL 存储引擎还有哪些?

MySQL 支持多种存储引擎,不同引擎在性能、事务支持、锁机制、存储结构等方面差异显著,核心用于适配不同业务场景(如高并发读写、数据备份、只读查询等)。以下是 MySQL 中常用及重要的存储引擎详解:

一、核心存储引擎(MySQL 5.5+ 主流)

1. InnoDB(默认存储引擎)
  • 定位:MySQL 5.5 及以上版本的默认引擎,专为事务安全、高并发读写设计,是绝大多数生产环境的首选。
  • 核心特性
    • 支持 ACID 事务(原子性、一致性、隔离性、持久性),通过 COMMIT/ROLLBACK 保证数据完整性。
    • 支持 行级锁(仅锁定修改的行,而非整个表),并发性能优异(适合多用户同时读写)。
    • 支持 外键约束FOREIGN KEY),维护表之间的关联完整性。
    • 支持 MVCC(多版本并发控制),实现 “读不加锁、写不阻塞读”,提升读写并发效率。
    • 自带 崩溃恢复机制(基于 redo log 和 undo log),数据可靠性高。
    • 存储结构:数据和索引存储在 .ibd 文件中(独立表空间,默认开启)。
  • 适用场景:电商订单、金融交易、用户中心等需要事务、高并发的核心业务表。
2. MyISAM(经典旧引擎)
  • 定位:MySQL 5.5 之前的默认引擎,主打读取性能优先,无事务支持。
  • 核心特性
    • 不支持事务、外键、行级锁,仅支持 表级锁(修改表时锁定整个表,并发写入性能差)。
    • 存储结构:数据存在 .MYD 文件,索引存在 .MYI 文件(索引和数据分离)。
    • 支持 全文索引(MySQL 5.6 后 InnoDB 也支持)和 压缩表(适合只读归档数据)。
    • 优点:读取速度快(无事务开销),占用磁盘空间小。
    • 缺点:崩溃后数据易损坏(无恢复机制),写入并发低。
  • 适用场景:只读报表、日志归档、静态数据(如商品分类表,极少修改)。

二、其他常用存储引擎

3. Memory(临时内存引擎)
  • 定位:数据完全存储在 内存 中,速度极快,但数据易丢失。
  • 核心特性
    • 存储介质:内存(MySQL 重启、服务器断电后数据全部丢失)。
    • 支持 哈希索引(默认)和 B+ 树索引,查询速度远超磁盘引擎。
    • 不支持事务、外键,支持表级锁。
    • 存储限制:表大小受 max_heap_table_size 配置限制(默认 16MB)。
  • 适用场景:临时计算结果(如统计中间表)、缓存高频访问的小表(如字典表),需手动处理数据持久化。
4. CSV(逗号分隔值引擎)
  • 定位:数据以 CSV 格式(文本文件)存储,适合数据导入 / 导出。
  • 核心特性
    • 存储文件:.csv(数据)和 .frm(表结构),文本格式可直接用 Excel 打开。
    • 不支持索引、事务、外键,仅支持表级锁。
    • 优点:数据可直接编辑(文本方式),跨系统迁移方便。
    • 缺点:查询性能极差,仅适合小量数据的导入 / 导出场景。
  • 适用场景:数据交换(如与第三方系统同步数据)、临时存储导入的原始数据。
5. Archive(归档引擎)
  • 定位:专为 海量只读归档数据 设计,压缩比极高。
  • 核心特性
    • 支持高压缩(压缩比可达 1:10),节省磁盘空间。
    • 仅支持 INSERT 和 SELECT 操作,不支持 UPDATE/DELETE(归档数据无需修改)。
    • 不支持索引、事务、外键,查询性能差(需全表扫描)。
  • 适用场景:日志归档(如系统操作日志、用户行为日志)、历史数据存储(如 5 年前的订单记录)。
6. Blackhole(黑洞引擎)
  • 定位:“数据黑洞”,写入的数据会被丢弃,不存储任何数据。
  • 核心特性
    • 接收 INSERT 语句,但数据不会持久化(查询返回空)。
    • 支持事务语法,但无实际事务保障。
  • 适用场景:主从复制测试(如验证复制链路是否正常)、日志转发(仅记录写入操作,不存储数据)。
7. Federated(联邦引擎)
  • 定位:跨服务器访问表,可将远程 MySQL 服务器的表映射为本地表。
  • 核心特性
    • 本地不存储数据,查询时转发请求到远程服务器。
    • 支持 SELECT/INSERT/UPDATE/DELETE,但性能依赖网络和远程服务器。
  • 适用场景:跨服务器数据联合查询(如合并多个分公司的业务数据),注意:MySQL 8.0 中默认未启用,需手动配置。

三、存储引擎对比表

特性InnoDBMyISAMMemoryCSVArchive
事务支持
行级锁❌(表级锁)❌(表级锁)❌(表级锁)❌(表级锁)
外键支持
索引支持✅(B + 树)✅(B + 树 / 全文)✅(哈希 / B + 树)
数据持久化✅(磁盘)✅(磁盘)❌(内存)✅(文本)✅(压缩磁盘)
崩溃恢复
适用场景核心业务 / 高并发只读 / 静态数据临时表 / 缓存数据交换日志归档

四、如何选择存储引擎?

  1. 优先选 InnoDB:绝大多数业务(需要事务、高并发、数据可靠性)都适用,是 MySQL 官方推荐的默认选择。
  2. 只读 / 静态数据选 MyISAM:如商品分类、地区表,追求读取速度,可接受无事务。
  3. 临时数据选 Memory:如统计中间结果,需极致查询速度,无需持久化。
  4. 归档数据选 Archive:如日志、历史数据,追求高压缩比,无需修改。
  5. 数据交换选 CSV:需跨系统导入导出,文本格式兼容。

五、查看 / 修改存储引擎

  1. 查看数据库支持的存储引擎
    SHOW ENGINES;
    
  2. 查看表的存储引擎
    SHOW TABLE STATUS LIKE '表名';
    
  3. 创建表时指定存储引擎
    CREATE TABLE 表名 (
      id INT PRIMARY KEY
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
  4. 修改表的存储引擎(注意:不支持事务的引擎转 InnoDB 需谨慎,可能丢失数据):
    ALTER TABLE 表名 ENGINE=InnoDB;
    

总结

InnoDB 是 MySQL 生态的核心引擎,覆盖绝大多数生产场景;其他引擎均为 “专用场景优化”,需根据业务需求(事务、并发、存储成本、读写特性)选择。实际应用中,建议优先使用 InnoDB,仅在特殊场景(如归档、临时表)考虑其他引擎。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canjun_wen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值