MySQL进阶知识点(六)---- 存储引擎

一、 MySQL 体系结构

为了更好地理解存储引擎,首先需要了解 MySQL 的总体架构,可以分为四层:

层级 组件 说明
连接层 连接池、身份验证 负责客户端连接管理、权限认证等
服务层 SQL接口、解析器、优化器、查询缓存 负责SQL语句的解析、优化、以及内置函数、触发器等
引擎层 可插拔存储引擎 核心! 负责数据的存储和提取。服务器通过API与存储引擎通信
存储层 文件系统、日志 将数据存储在硬盘上,包括redo log、undo log、数据文件等

核心思想 :MySQL 的架构设计使得其存储引擎层是可插拔的。这意味着你可以为不同的表选择不同的存储引擎,以适应各种应用场景。


二、 存储引擎简介

1. 什么是存储引擎?

存储引擎是数据库底层软件组件,它规定了数据如何存储、如何索引、如何更新和查询。不同的存储引擎提供不同的功能和特性。

2. 查看支持的存储引擎
sql 复制代码
SHOW ENGINES;
3. 查看/修改表的存储引擎
sql 复制代码
-- 查看某张表的存储引擎
SHOW CREATE TABLE table_name;

-- 创建表时指定存储引擎
CREATE TABLE table_name (...) ENGINE=InnoDB;

-- 修改已存在表的存储引擎
ALTER TABLE table_name ENGINE=MyISAM;

三、 存储引擎特点

MySQL 支持多种存储引擎,其中最主流的是 InnoDBMyISAM

InnoDB (MySQL 5.5.8 后成为默认存储引擎)
特性 描述
事务支持 支持 ACID 事务,具有提交(commit)和回滚(rollback)能力
外键约束 支持 外键约束,保证数据完整性
锁机制 🔒 行级锁,支持并发写入,大大减少锁冲突,适合高并发
崩溃恢复 ✅ 通过 redo logundo log 提供优秀的崩溃恢复能力
存储方式 所有表和数据存储在表空间 中(如 ibdata1 文件),或按表文件存储(innodb_file_per_table=ON
MVCC ✅ 支持多版本并发控制,提高并发读写性能

适用场景

  • 需要事务支持(如银行转账、订单系统)

  • 高并发读写(行级锁优势明显)

  • 需要外键约束来保证数据完整性

  • 绝大多数 OLTP (联机事务处理) 应用

MyISAM (MySQL 5.5 之前的默认引擎)
特性 描述
事务支持 不支持
外键约束 不支持
锁机制 🔒 表级锁,并发写入性能差(读锁和写锁是互斥的)
崩溃恢复 ❌ 较差
存储方式 每个表在磁盘上存储为三个文件: .frm(表结构)、.MYD(数据)、.MYI(索引)
全文索引 支持(在早期版本中是优势)
压缩性 ✅ 支持压缩表,适合只读数据

适用场景

  • 只读或读多写少的应用

  • 不需要事务

  • 数据仓库、报表系统等查询密集型且对数据一致性要求不高的场景

其他存储引擎简要对比
引擎 主要特点 适用场景
Memory 数据存储在内存中,速度极快;服务器重启后数据丢失 缓存、临时表、会话存储
Archive 只支持INSERT和SELECT,高压缩比 日志记录、数据归档
CSV 以CSV格式存储数据 数据交换

四、 InnoDB vs MyISAM 核心区别总结

对比项 InnoDB MyISAM
事务 ✅ 支持 ❌ 不支持
外键 ✅ 支持 ❌ 不支持
锁级别 行级锁 表级锁
并发性能 (写操作) (写操作)
崩溃恢复 ✅ 安全,支持 ❌ 不安全
全文索引 ✅ MySQL 5.6+ 支持 ✅ 支持(早期版本优势)
存储文件 .frm + ibdata1 / .ibd .frm + .MYD + .MYI
COUNT(*) 需要全表扫描(无WHERE时) 直接返回保存的计数(极快)

五、 存储引擎选择

选择存储引擎需要根据应用的核心需求来决定。

需求场景 推荐引擎 理由
绝大多数通用业务场景 InnoDB 支持事务、行级锁、外键,数据安全性和并发性能是首要考虑
读远大于写,且不需要事务 MyISAM 在只读或轻度写入场景下,COUNT(*) 等特定操作更快
需要全文索引 (MySQL 5.6前) MyISAM 早期版本中唯一支持全文索引的引擎
临时数据、高速缓存 Memory 数据存储在内存中,读写速度极快
日志记录、数据归档 Archive 极高的压缩比,节省存储空间

六、现代 MySQL 开发的黄金法则

除非有非常特殊且合理的理由,否则请始终使用 InnoDB 存储引擎。

  • 自 MySQL 5.5.8 起,InnoDB 已成为默认引擎

  • 它提供了事务安全行级锁,这是现代应用程序的基石。

  • 在大多数情况下,其性能已经优于或等同于 MyISAM。

  • MySQL 8.0 中,MyISAM 的相关系统表也已被 InnoDB 替代,这预示着其未来的地位。

小结

存储引擎是 MySQL 数据库的心脏 ,它决定了数据的存储方式、事务能力、并发控制和可靠性。理解不同存储引擎的特点,并根据业务需求做出正确选择,是构建高性能、高可用数据库应用的关键一步。在当今,InnoDB 是你不二的选择

相关推荐
百锦再2 小时前
从 .NET 到 Java 的转型指南:详细学习路线与实践建议
android·java·前端·数据库·学习·.net·数据库架构
卷Java3 小时前
uni-app 模板语法修复说明
java·数据库·spring boot·uni-app·mybatis
没有bug.的程序员3 小时前
MySQL 在金融系统中的应用:强一致性与高可用架构实战
java·mysql·金融·架构·高可用·强一致性
我要用代码向我喜欢的女孩表白3 小时前
HBase全量+增量迁移import/export方式
大数据·数据库·hbase
源码部署23 小时前
Java-尚硅谷_数据库中间件_Mycat教程
数据库
-dcr4 小时前
21.mariadb 数据库
数据库·云计算·运维开发·mariadb
荒村瘦马4 小时前
MySQL中SELECT 语句如何 INTO OUTFILE 保存数据到文件
数据库·mysql·导出文件·into outfile
Script kid4 小时前
Pytest框架速成
数据库·pytest
hans汉斯5 小时前
【人工智能与机器人研究】一种库坝系统水下成像探查有缆机器人系统设计模式
大数据·数据库·论文阅读·人工智能·设计模式·机器人·论文笔记