MySQL 进阶 学习大纲
- 存储引擎(本篇)
- 索引
- SQL 优化
- 视图 / 存储过程 / 触发器
- MySQL 锁机制
- InnoDB 引擎深度详解
- MySQL 运维管理
一、MySQL 整体体系结构
MySQL 整体分为四层架构,自上而下层层解耦,其中索引、存储引擎属于核心底层模块。
1. 四层架构拆解
- 客户端连接层:负责客户端连接、请求接入
- Server 服务层(核心服务层)
- 连接池:管理数据库连接、授权认证、权限校验
- SQL 接口:接收、处理用户 SQL 语句
- 解析器:语法解析、语义校验、生成语法树
- 查询优化器:优化 SQL 执行计划,选择最优执行方案
- 查询缓存:缓存查询结果(高版本 MySQL 已废弃)
- 存储引擎层(可插拔)
- MySQL 核心特色:可插拔式存储引擎
- 索引是在存储引擎层实现的,不同引擎索引机制不同
- 物理存储层:存放系统文件、数据文件、日志文件等底层磁盘数据
二、存储引擎 核心简介
存储引擎相当于 MySQL 的数据发动机 ,负责数据表的数据存储、读取、索引维护、事务控制 等底层操作。 MySQL 支持多存储引擎,不同表可以使用不同存储引擎,灵活性极高。
1. MySQL 默认存储引擎
MySQL 5.5+ 之后默认存储引擎:InnoDB
2. 查看数据库支持的所有存储引擎
sql
sql
-- 查看当前MySQL支持的所有存储引擎
SHOW ENGINES;
常用三大引擎:InnoDB、MyISAM、MEMORY
3. 建表时指定存储引擎
语法:建表语句末尾添加 ENGINE=引擎名
sql
sql
-- 示例:创建 MyISAM 引擎数据表
create table my_myisam
(
id int null,
name varchar(10) null
)
engine = MyISAM;
三、三大主流存储引擎详细特点
1. InnoDB 存储引擎(重点)
定位:兼顾高可靠性、高性能的通用事务型存储引擎,生产环境首选。
核心三大特性(面试必背)
- ✅ 支持事务:DML 操作遵循 ACID 事务模型,保证数据一致性
- ✅ 行级锁:锁粒度小,并发性能极高
- ✅ 支持外键:保障表与表之间数据完整性、关联性
InnoDB 物理文件
每个 InnoDB 表独立表空间文件:xxx.ibd 作用:存储表结构、数据、索引所有数据
sql
sql
-- 查看是否开启独立表空间(默认开启)
show variables like 'innodb_file_per_table';
InnoDB 逻辑存储结构(层级关系)
表空间 (Tablespace) → 段 (Segment) → 区 (Extent) → 页 (Page) → 行 (Row)
- 页 (Page):InnoDB 最小 IO 单元
- 行 (Row):最小数据存储单元
2. MyISAM 存储引擎(老旧默认引擎)
定位:早期 MySQL 默认引擎,主打高速查询,无事务支持。
核心特点
- ❌ 不支持事务
- ❌ 不支持外键
- ✅ 表级锁:锁粒度大,并发性能差
- ✅ 查询、插入速度极快
MyISAM 物理文件(三类)
xxx.sdi:存储表结构信息xxx.MYD:专门存储表数据xxx.MYI:专门存储表索引
3. MEMORY 存储引擎(内存引擎)
定位:数据全部存储在内存中,用作临时表、缓存表。
核心特点
- 数据常驻内存,访问速度极快
- 默认使用 Hash 索引
- 服务重启数据丢失,无法持久化
- 有表大小限制,不适合存储大数据量
物理文件
仅 xxx.sdi:只保存表结构,数据不落地磁盘
四、InnoDB & MyISAM 核心区别(面试高频)
表格
| 对比维度 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 支持(ACID) | 不支持 |
| 锁机制 | 行级锁(并发高) | 表级锁(并发低) |
| 外键约束 | 支持 | 不支持 |
| 数据安全 | 高,支持崩溃恢复 | 低,无事务保障 |
| 读写性能 | 读写均衡,适合高并发 | 读快、写差,适合纯读场景 |
五、存储引擎选型规范(生产实战)
1. InnoDB 适用场景(90% 业务首选)
适用于对事务完整性、数据一致性、并发性能要求高的业务:
- 频繁更新、删除、修改的业务表
- 需要事务、转账、订单、支付等核心业务
- 需要外键关联、保证数据完整性的场景
- 高并发访问的业务系统
2. MyISAM 适用场景
适用于多读少写、无事务、低并发的非核心业务:
- 静态数据、日志数据、统计数据
- 几乎只查询、极少修改删除的表
- 对数据事务一致性无要求的场景
3. MEMORY 适用场景
- 临时计算表、中间缓存表
- 短期热点数据缓存,无需持久化数据
- 对响应速度要求极高,可容忍数据丢失的场景
六、全文核心总结
- MySQL 架构分为:连接层、服务层、引擎层、存储层,索引在引擎层实现
- InnoDB 核心:事务、行锁、外键,生产环境首选
- MyISAM 核心:无事务、表锁、读快写慢
- MEMORY 核心:内存存储、速度快、不持久化
- 核心业务数据一律使用 InnoDB,非核心静态数据可酌情使用 MyISAM