当前位置: 首页 > news >正文

MySQL 8.0存储引擎选型指南

这段文档是 《MySQL 8.0 参考手册》第18章 “Alternative Storage Engines” 的核心内容,它系统地介绍了 InnoDB 之外的其他存储引擎,并提供了选择合适引擎的决策依据。

我们来逐层深入理解,帮助你掌握:

  • MySQL 存储引擎的本质;
  • 各个替代引擎的特点与适用场景;
  • 如何根据业务需求选择最合适的存储引擎。

🧩 一、核心思想:MySQL 是“插件化”的数据库

🔌 1. 什么是存储引擎?

存储引擎(Storage Engine) 是 MySQL 中负责 数据存储、检索、索引、事务、锁机制 的底层组件。

你可以把它想象成“文件系统 + 数据结构 + 并发控制”的组合体。

🏗️ 2. 插件化架构(Pluggable Architecture)

MySQL 支持 多种存储引擎共存,每个表可以使用不同的引擎:

CREATE TABLE t1 (id INT) ENGINE=InnoDB;
CREATE TABLE t2 (id INT) ENGINE=MyISAM;
CREATE TABLE t3 (id INT) ENGINE=MEMORY;

👉 这意味着:你可以在一个数据库中混合使用不同特性的表

📊 3. 查看支持的引擎

SHOW ENGINES\G

输出中:

  • Support = YES:可用;
  • DEFAULT:当前默认(MySQL 8.0 是 InnoDB);
  • NO:未启用或不支持。

🏆 二、MySQL 8.0 各存储引擎概览

引擎特点适用场景
InnoDB默认,支持事务、行锁、外键、MVCC通用 OLTP,高并发读写
MyISAM旧引擎,表锁,无事务只读/读多写少,如日志归档
MEMORY数据全在内存,快但不持久临时表、缓存、会话状态
CSV以 CSV 文件存储,可被 Excel 打开数据导入导出
ARCHIVE高压缩比,只追加,无索引历史日志、审计数据
BLACKHOLE写入即丢弃,类似 /dev/null复制过滤、测试 DML
MERGE将多个 MyISAM 表合并为一个逻辑表数据仓库分片查询
FEDERATED访问远程 MySQL 表分布式数据库(已不推荐)
EXAMPLE示例引擎,无实际功能开发者学习插件开发

⚠️ 注意:NDB(MySQL Cluster)不在本章,它有独立章节(Chapter 25)。


🔍 三、关键引擎详解

1️⃣ MyISAM

  • ✅ 优点:
    • 存储空间小;
    • 全文索引(FULLTEXT)早于 InnoDB 支持;
    • 简单查询快。
  • ❌ 缺点:
    • 表级锁 → 写操作会阻塞所有读;
    • 不支持事务、外键、崩溃恢复;
    • 崩溃后易损坏。
  • 📌 使用建议:
    • 仅用于只读或极少写入的场景
    • 新项目不推荐使用。

2️⃣ MEMORY

  • ✅ 优点:
    • 所有数据在 RAM,极快
    • 支持哈希索引(Hash Index),点查极快。
  • ❌ 缺点:
    • 重启即丢失(不持久);
    • 内存有限,不适合大表;
    • 不支持 BLOB/TEXT;
    • 表级锁。
  • 📌 使用建议:
    • 临时中间表;
    • 缓存会话数据;
    • 但现代 InnoDB 的 Buffer Pool 已能将热数据常驻内存,MEMORY 使用场景越来越少

3️⃣ CSV

  • ✅ 优点:
    • 数据以纯文本 .csv 文件存储;
    • 可用 Excel、Python、Shell 脚本直接读写;
    • 适合 ETL(抽取、转换、加载)。
  • ❌ 缺点:
    • 无索引 → 查询慢;
    • 不支持 NULL(早期版本);
    • 不支持事务。
  • 📌 使用建议:
    • 导出数据给外部系统;
    • 导入 CSV 文件到 InnoDB 表前的“中转站”。

4️⃣ ARCHIVE

  • ✅ 优点:
    • 高压缩比(通常 10:1);
    • 只支持 INSERTSELECT,适合日志类数据;
    • 数据追加模式,安全。
  • ❌ 缺点:
    • 无索引 → 全表扫描;
    • 不支持 UPDATE/DELETE
    • 查询性能差。
  • 📌 使用建议:
    • 存储访问频率极低的历史数据(如 3 年前的日志);
    • 安全审计日志;
    • 不适合频繁查询。

5️⃣ BLACKHOLE

  • ✅ 特性:
    • 写入任何数据都会“消失”,像 Unix 的 /dev/null
    • 查询永远返回空集。
  • 📌 使用场景:
    • 复制过滤:主库写入 BLACKHOLE 表,不存数据,但 SQL 会发送到从库(从库用其他引擎存储);
    • 测试 DML 语句:验证 SQL 语法,不污染数据;
    • 日志记录:只记录操作,不存结果。

6️⃣ MERGE

  • ✅ 特性:
    • 将多个结构相同的 MyISAM 表“合并”成一个逻辑表;
    • 可以 SELECTDELETEUPDATE,自动路由到子表。
  • 📌 使用场景:
    • 按时间分片的日志表(如 logs_2024, logs_2025);
    • 数据仓库中大表的逻辑聚合。
  • ❌ 注意:
    • 已被 分区表(Partitioning) 取代;
    • 不支持事务。

7️⃣ FEDERATED

  • ✅ 特性:
    • 可以访问远程 MySQL 服务器上的表,像本地表一样查询;
    • 实现分布式数据库逻辑。
  • ❌ 缺点:
    • 性能差(网络延迟);
    • 不支持事务完整性;
    • 错误处理复杂;
    • MySQL 8.0 中默认禁用
  • 📌 建议:
    • 不推荐生产使用
    • 可考虑用 MySQL Router 或应用层分库分表替代。

8️⃣ EXAMPLE

  • ✅ 特性:
    • 一个“空壳”引擎,用于展示如何开发存储引擎;
    • 可创建表,但不能存取数据。
  • 📌 用途:
    • 仅用于 开发者学习 MySQL 插件开发
    • 无生产价值。

📊 四、存储引擎功能对比表解析(Table 18.1)

这是选择引擎的“决策矩阵”。我们重点解读几个关键维度:

功能说明
B-tree indexes大多数引擎支持,但 Archive 和 NDB 不支持(NDB 用 T-tree/Hash)
TransactionsInnoDB 和 NDB 支持事务(ACID)
Foreign key support只有 InnoDB 和 NDB 支持外键约束
Full-text searchMyISAM 和 InnoDB 支持(InnoDB 从 5.6+)
Locking granularityInnoDB/NDB 是 行锁,MyISAM/MEMORY 是 表锁 → 高并发下 InnoDB 更优
MVCC只有 InnoDB 支持多版本并发控制 → 高并发读写不阻塞
Storage limitsInnoDB 最大 64TB;NDB 高达 384EB(Exabyte)→ 适合超大规模集群
Compressed dataInnoDB、MyISAM、Archive 支持压缩 → 节省空间
Data cachesInnoDB 有 Buffer Pool 缓存数据页 → 性能高

✅ 五、如何选择存储引擎?

业务需求推荐引擎
通用 Web 应用(用户、订单、支付)InnoDB(默认)
高并发、事务、外键InnoDB
只读报表、数据仓库MyISAM分区表 + InnoDB
临时数据、会话缓存MEMORY(小数据)或 InnoDB + Buffer Pool
导出数据给 ExcelCSV
存储历史日志、审计数据ARCHIVE
主从复制中过滤数据BLACKHOLE
按时间分片的大表查询MERGE分区表
分布式数据库NDB应用层分库分表

🚫 六、重要提醒

  1. InnoDB 是首选

    • Oracle 官方推荐;
    • MySQL 8.0 默认;
    • 支持事务、外键、崩溃恢复、高并发。
  2. 避免混合使用过多引擎

    • 增加运维复杂度;
    • 备份、监控策略不同。
  3. FEDERATED 和 EXAMPLE 不用于生产

  4. MyISAM 已过时

    • 除非特殊场景,否则不要使用;
    • 崩溃后修复困难。

📌 总结:一句话选型指南

场景用哪个引擎?
“我不知道用啥”➡️ InnoDB
要事务、外键、高并发➡️ InnoDB
数据要永久保存➡️ InnoDB
临时数据,重启可丢➡️ MEMORY
导出到 Excel➡️ CSV
存 10 年前的日志➡️ ARCHIVE
主库不存数据只转发➡️ BLACKHOLE
跨服务器查表➡️ 用中间件,别用 FEDERATED

如果你有具体的业务场景(比如“我要设计一个日志系统”或“高并发订单系统”),我可以帮你推荐最合适的存储引擎组合。

http://www.dtcms.com/a/449863.html

相关文章:

  • 做移动端网站设计网站怎样制作
  • redis的哨兵机制简单问题
  • 打造自己的中秋 AR 赏月应用:实现虚实融合的节日体验
  • 建设网站学什么建设考试的报名网站
  • 色块网站设计在家做的网站编辑
  • WebRTC 入门与实战(二)之中级篇
  • pass@1是什么意思
  • 沈阳网站建设技术公司百度站长工具seo
  • 做国内电影网站赚钱不简述电子商务网站开发的主要步骤
  • InputStream和OutputStream在网络编程发挥的作用
  • CCS闪退问题---------中文系统用户名
  • 专业电竞体育数据与系统解决方案
  • 初阶运维工程师工作内容与能力体系:专业视角解析
  • 我的钢铁网网站架构林芝北京网站建设
  • OpenManus项目架构解析
  • 【HarmonyOS】消息通知
  • 网上做流量对网站有什么影响asp.net 做网站实例
  • 深圳建设资格注册中心网站网站建设采用的技术
  • gRPC从0到1系列【22】
  • 闹钟定时器(Alarm Timer)初始化:构建可挂起的定时器基础框架
  • 云南公司建网站多少钱wordpress修改菜单的原始链接
  • 自己如何建设个网站首页站酷网官方入口网页版
  • 华为matebook16s 2022数字键无法使用解决方法
  • 邯郸网站建设品牌公司app和网站开发区别
  • 并查集的优化
  • LeetCode:93.最长回文子串
  • 设计作品网站有哪些宝塔建的数据库安装不了wordpress
  • 锐捷无线控制器基础配置
  • mineru处理后的文档生成对应层级的标题
  • 台山网站建设公司公司网站建设如何撤销