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 是你不二的选择

相关推荐
爱敲代码的小鱼几秒前
springsecurity:
java·开发语言·数据库
秋田君3 分钟前
QT_QT信号与槽机制
开发语言·数据库·qt
DFT计算杂谈1 小时前
vasp如何计算金属的铁电极化强度?
数据库
EterNity_TiMe_1 小时前
别让告警变成噪音:用Prometheus和Alertmanager搭一套可远程查看的监控系统
数据库·人工智能·ai·postgresql·prometheus·cpolar
不超限1 小时前
Postgresql 数据库 自增字段,Vastbase 无效的问题
数据库
阿坤带你走近大数据2 小时前
Oracle新老SQL写法对比
数据库·sql·oracle
还是鼠鼠2 小时前
AI掘金头条新闻系统 (Toutiao News)-缓存相关推荐新闻
后端·python·mysql·fastapi·web
努力努力再努力wz2 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
HackTwoHub3 小时前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
宠友信息3 小时前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app