MySQL1️⃣体系结构 & 存储引擎
1、MySQL 体系结构
-
系统管理和控制工具:备份与恢复、安全、复制、集群等。
-
连接层:引入线程池的概念。
- 认证,线程管理,连接管理等。
- 可实现基于 SSL 的安全连接,服务器也会为安全接入的每个客户端验证它所具有的操作权限。
-
服务层:完成大多数的核心服务功能。
- SQL 接口:处理 SQL 命令,存储过程,试图,触发器等
- 解析器
- 查询优化器:是否使用索引等
- 缓存
-
引擎层:内存、索引、存储管理
- 真正负责 MySQL 中数据的存储和提取,服务器通过 API 和存储引擎进行通信。
- 不同的存储引擎具有不同的功能,根据需要选取合适的存储引擎。
- 实现索引。
-
存储层
2、存储引擎(❗)
存储引擎:存储数据、建立索引、更新/查询数据等技术的实现方式。
- 基于表,而不是基于库(因此存储引擎也称为表类型)。
- 建表的时候可以指定存储引擎,否则自动使用默认引擎。
2.1、三大存储引擎
2.1.1、InnoDB(❗)
InnoDB 引擎:兼顾高可靠性和高性能的通用存储引擎。
(MySQL 5.5+ 默认)
-
特点:
- 事务:DML 操作遵循 ACID 模型。
- 外键:支持 FOREIGN KEY 约束,保证数据的完整性和正确性。
- 行级锁:提高并发访问性能。
-
文件:
- InnoDB 引擎的每张表,都对应一个 ibd 表空间文件。
- 存储表结构信息、数据和索引。
-
逻辑存储结构:
2.1.2、MyISAM
MyISAM:MySQL 早期的默认存储引擎。
- 特点:
- 不支持事务、外键。
- 支持表级锁,不支持行级锁。
- 访问速度快。
- 文件:
- sdi:存储表结构信息
- MYD:存储数据
- MYI:存储索引
2.1.3、Memory
Memory:受硬件、断电等影响,只能作临时表或缓存使用。
- 特点:数据存放在内存中、支持 hash 索引。
- 文件:sdi 文件,存储表结构信息。
2.1.4、区别(❗)
主要从 事务、外键、锁 的角度,
也可以从索引结构、存储限制等方面深入回答。
InnoDB | MyISAM | Memory | |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务 | ✔ | - | - |
外键 | ✔ | - | - |
锁机制 | 行级锁 | 表锁 | 表锁 |
B+ 树索引 | ✔ | ✔ | ✔ |
Hash 索引 | - | - | ✔ |
全文索引 | ✔(5.6 后) | ✔ | - |
空间使用 | 高 | 低 | N/A |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
存储表的行数 | ❌ | ✔ | ❌ |
COUNT(*) | 全表扫描 | 保存表的行数 | - |
InnoDB 是聚簇索引,叶节点存储数据(key 或完整信息),可能导致回表查询。
MyISAM 是非聚簇索引,叶节点存储数据的指针。
2.2、如何选用
原则:只有合不合适,没有好坏之分。
根据应用系统的特点,选择合适的存储引擎。
对于复杂的应用系统,可以选择多种存储引擎组合。
- InnoDB
- 对事务、并发性要求高
- 除了读操作和插入操作,还有很多更新、删除操作。
- MyISAM(很少使用,用 MongoDB 替代)
- 对事务、并发性要求不高。
- 以读操作和插入操作为主,很少更新、删除操作。
- Memory(很少使用,用 Redis 替代)
- 通常用于临时表和缓存,访问速度快
- 缺点是对表的大小有限制,无法保障数据的安全性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!