首页 >> 基础教程

mysql的几种存储引擎

      MySQL 支持多种存储引擎(Storage Engine),每种引擎都有其特定的设计目标、优势和适用场景。存储引擎决定了表如何存储数据、如何建立索引、是否支持事务、并发控制机制以及数据恢复能力等核心特性。 以下是最常见的几种存储引擎及其关键特性:

1. InnoDB (默认引擎)

  • 核心特性:

    • ACID 事务支持: 提供完整的提交(Commit)、回滚(Rollback)和崩溃恢复(Crash Recovery)能力,满足数据一致性要求高的场景。

    • 行级锁: 默认使用行级锁,大幅提升多用户并发读写性能,减少锁冲突。

    • 外键约束: 支持 FOREIGN KEY 约束,强制保证表间数据的引用完整性。

    • MVCC (多版本并发控制): 提供高并发性,非锁定一致性读(在 READ COMMITTED 和 REPEATABLE READ 隔离级别下),读操作不阻塞写操作,写操作不阻塞读操作(理想情况下)。

    • 聚集索引: 表数据按主键顺序物理存储(主键索引即数据文件),主键查询极快。二级索引叶子节点存储主键值。

    • Write-Ahead Logging (WAL): 使用 Redo Log 保证事务持久性(Durability),使用 Undo Log 支持事务回滚和 MVCC。

      优化缓冲池: 通过 Buffer Pool 在内存中缓存数据和索引,减少磁盘 I/O。

    • 热备份: 支持通过第三方工具(如 Percona XtraBackup)或 MySQL Enterprise Backup 进行非阻塞的在线物理热备份。

      适用场景: 绝大多数应用场景的首选,尤其适用于需要事务、高并发、数据一致性要求高、有外键约束或需要在线热备份的场景(如 OLTP 系统、核心业务表)。

2. MyISAM (历史遗留引擎,MySQL 5.5 之前默认)

  • 核心特性:

    • 非事务性: 不支持事务、回滚或崩溃后的安全恢复(可能损坏需要修复)。

    • 表级锁: 进行写操作(INSERT/UPDATE/DELETE)时锁定整个表,并发写性能差,读操作会阻塞写操作(写操作也会阻塞读操作)。

    • 全文索引: 支持 FULLTEXT 索引,适合文本搜索(但 InnoDB 从 5.6 开始也支持)。

    • 高速读: 对于只读或读多写少且对数据一致性要求不高的场景,纯读性能可能快于 InnoDB(尤其在 COUNT(*) 操作上,因为单独存储了行数)。

    • 压缩表: 支持压缩的只读表(myisampack),节省空间。

    • 存储结构: 每个表存储为三个文件:.frm (表定义), .MYD (MyISAM Data), .MYI (MyISAM Index)。

  • 适用场景:

    • 只读或读频率远高于写频率的应用。

    • 数据仓库或报表数据库中的静态表(可压缩)。

    • 需要全文索引且 MySQL 版本 < 5.6(现在应优先使用 InnoDB 的全文索引)。

    • 重要提示: 由于其缺乏事务、行锁和崩溃安全恢复,在现代应用中已不推荐用于核心业务表。 主要用于兼容旧系统或特定只读场景。

3. Memory (HEAP)

  • 核心特性:

    • 内存存储: 所有数据和索引都存储在内存(RAM)中,速度极快。

    • 非持久性: 服务器重启或崩溃会导致所有数据丢失。表定义(.frm)会保留。

    • 表级锁: 并发写性能有限。

    • 哈希索引 (默认): 默认使用哈希索引,等值查询极快。也支持 B-Tree 索引。

    • 不支持 BLOB/TEXT: 只支持固定长度数据类型(即使是 VARCHAR 也视为 CHAR)。

  • 适用场景:

    • 存储临时数据、会话数据、中间结果集或查找表。

    • 需要极快访问速度且能容忍数据丢失的场景。

    • 替代方案: 通常更推荐使用 Redis、Memcached 等专门的内存数据库,或 MySQL 的 tmp_table_size/max_heap_table_size 配置管理的内部临时表(在内存不足时可能转储到磁盘)。

4. Archive

  • 核心特性:

    • 高压缩: 专为存储和检索大量很少引用的历史、归档或审计数据设计,压缩率非常高。

    • 只写/读优化: 支持 INSERT 和 SELECT不支持 UPDATEDELETEREPLACE 支持行级锁(仅在插入时)。

    • 顺序访问: 数据在插入时被压缩,查询时需要全表扫描解压,适合顺序读取。

  • 适用场景: 日志记录、审计跟踪、历史数据存储等需要极致压缩且几乎只追加(Append-only)、很少查询的场景。

5. CSV

  • 核心特性:

    • 纯文本存储: 数据以逗号分隔值(CSV)格式存储在纯文本文件中(.CSV 文件)。

    • 无索引: 不支持索引,查询需全表扫描。

    • 直接编辑: 可以直接用文本编辑器编辑 .CSV 文件,数据库外部的程序也能轻松读写。

  • 适用场景: 数据交换(导入/导出),需要外部程序直接读写数据库文件内容的简单应用。

6. Blackhole

  • 核心特性:

    • "黑洞"引擎: 接收数据(执行 INSERT 等语句)但不实际存储任何数据。查询总是返回空集。

    • 日志/复制: 主要用途是作为复制链中的中继(过滤不需要的语句)或用于记录语句日志(binlog 会记录,但表本身无数据)。

  • 适用场景: 高级复制配置、基准测试(测量语句处理开销本身)。

7. NDB (NDBCLUSTER)

  • 核心特性:

    • 分布式内存集群: MySQL Cluster 的核心引擎,数据分布在多个数据节点上(可内存存储或磁盘存储),提供高可用性和线性扩展性。

    • 高可用性与冗余: 数据自动分片(Sharding)和同步复制,无单点故障。

    • 实时性: 设计用于需要高吞吐量、低延迟、99.999% 可用性的场景。

    • 复杂架构: 部署、管理和配置相对复杂。

  • 适用场景: 电信、实时金融、需要极高可用性和横向扩展能力的应用(如用户数据库、会话存储)。

8. Federated

  • 核心特性:

    • "链接表": 本身不存储数据。当在 Federated 表上查询时,会从远程 MySQL 数据库上的某个表拉取数据。

    • 性能开销: 每次访问都涉及网络请求,性能通常较差。

  • 适用场景: 偶尔需要透明访问远程 MySQL 表数据的场景(现代更推荐使用数据库链接或 API 集成)

最新文章
InnoDB 和 MyISAM 主要有什么区别?2025-07-06
mysql存储引擎应该怎么选择?2025-07-06
mysql的几种存储引擎2025-07-06
MySQL 的段区页行2025-07-06
一条更新语句是如何执行的?2025-07-06
mysql中一条查询语句是如何执行的?2025-07-02
MySQL基础架构及执行流程解析2025-07-02
MySQL SQL语法树解析过程详解2025-07-02
mysql中SQL 的隐式数据类型转换?2025-07-01
MySQL 第 3-10 条记录怎么查?2025-06-30
备案号:蜀ICP备2023042032号-1