SQL进阶笔记 · 第1篇:存储引擎

存储引擎是什么

存储引擎是 MySQL 中负责数据的存储、读取、管理以及索引、事务、锁等功能的底层软件组件。

简单理解:存储引擎决定了数据在硬盘或内存中"怎么存、怎么查、怎么维护"。

核心特点:

  • 插件式架构:MySQL 支持多种存储引擎,可以在表级别指定(一个数据库中不同表可以用不同引擎)。

  • 默认引擎:MySQL 5.5 之前是 MyISAM,之后是 InnoDB。


InnoDB

InnoDB 引擎提供了对数据库 ACID 事务的支持,并且还提供了行级锁和外键的约束。它的设计目标就是处理大数据容量的数据库系统。

可以理解为:"一个带事务、高并发、崩溃恢复能力的数据库操作系统"。MySQL 5.5以后默认引擎。

复制代码
它内部包含:
- 内存管理
- 日志系统
- 锁系统
- 崩溃恢复
- 页管理
- B+树索引
- MVCC

InnoDB 本质:

复制代码
内存(Buffer Pool)
+
日志系统(redo/undo)
+
B+树
+
锁系统
+
MVCC

InnoDB整体架构

复制代码
客户端SQL
↓
SQL解析
↓
执行器
↓
InnoDB
    │
    ├── Buffer Pool(内存缓存)
    ├── redo log(重做日志)
    ├── undo log(回滚日志)
    ├── change buffer
    ├── double write
    ├── lock system
    └── flush刷盘
↓
磁盘.ibd文件

MyISAM 引擎

原本 MySQL 的默认引擎,不提供事务的支持,也不支持行级锁和外键。现在基本淘汰。


最大问题是只有表锁

UPDATE user SET name='A' WHERE id=1,直接锁整张表,并发很差。


不支持事务

sql 复制代码
-- 示例:
BEGIN;
UPDATE A;
UPDATE B;
ROLLBACK;

MyISAM 会忽略 BEGIN、COMMIT、ROLLBACK、SAVEPOINT 等事务相关语句(不会报错,也不会开启事务)。

  • BEGIN 在 MyISAM 中不会生效。
  • UPDATE A; 执行后,立刻、永久修改磁盘上的数据。
  • 没有事务日志(undo log),所以改完就改完了,无法撤销。
  • UPDATE B; 同样,执行完后立即持久化。
  • ROLLBACK; 在这里毫无作用。
  • 因为前两个 UPDATE 已经被"硬提交"了,ROLLBACK 无法撤销它们。

MEMORY引擎

所有的数据都在内存中,不是磁盘。数据的处理速度快,但是安全性不高。

最大问题是重启数据丢失。只有表锁。数据太大内存吃不消。

默认是HASH索引,优点等值查询极快,缺点范围查询差。


对比

特性 InnoDB MyISAM MEMORY
事务 ✅ ❌ ❌
行锁 ✅ ❌
表锁 少 ✅ ✅
MVCC ✅ ❌ ❌
外键 ✅ ❌ ❌
崩溃恢复 ✅ ❌ ❌
数据存储 磁盘 磁盘 内存
重启保留数据 ✅ ✅ ❌
默认索引 B+树 B+树 HASH
并发能力 高 低 中
当前主流 ⭐⭐⭐⭐⭐ ⭐ ⭐⭐
相关推荐
独泪了无痕6 小时前
Spring Data Redis 快速上手
spring boot·redis·后端
IT19956 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除6 小时前
redis--IO 多路复用(select + poll)
数据库·sql
wangchunyu1148 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck9 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir9 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人9 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
m0_6399069410 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
2501_9445215910 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
lzhdim10 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis