红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 专栏
  3. MySQL学习笔记
  4. 正文

MySQL 从入门到精通 6:存储引擎

2025年8月3日 30点热度 0人点赞 0条评论

体系结构

MySQL 的架构图:

image-20250802155300524

主要分为以下几部分:

  • 连接层

  • 服务层

  • 引擎层

  • 存储层

存储引擎

存储引擎是存储数据、建立索引、更新/查询数据的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称作表类型。

查看任意一张表的建表语句:

show create table account;

结果可能类似:

CREATE TABLE `account` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `money` int DEFAULT NULL COMMENT '余额',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COMMENT='账户表'

建表语句中的ENGINE=InnoDB表名该表使用的存储引擎是InnoDB。

可以通过以下命令查看当前数据库支持哪些存储引擎:

show engines ;

结果:

image-20250802160008217

可以看到,InnoDB 是 MySQL 默认的存储引擎,且该引擎支持事务,支持保存点。

InnoDB

InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后是 MySQL 的默认存储引擎。

特点:

  • DML 操作遵循 ACID 模型,支持事务。

  • 行级锁,提高并发访问性能。

  • 支持外键 FOREIGN KEY 约束,保证数据的完整性和正确性。

每个使用了 InnoDB 的表都有一个对应的表空间文件(xxx.ibd),表空间文件中存放了表结构、数据和索引。

参数 innodb_file_per_table 决定是否每张表使用单独的表空间文件(或者多张表使用一个表空间文件)。

查询当前该参数的值:

show variables like 'innodb_file_per_table';

image-20250803105016718

表示当前每张表使用单独的表空间文件。

表空间文件保存在 MySQL 安装目录下的 /data/数据库名目录下:

image-20250803105518087

如果是安装到当前用户,也可能位于 C 盘的 用户/AppData/MySQL目录下。

MySQL 提供一个工具可以解读 ibd 文件:

ibd2sdi account.ibd

返回的信息是 JSON 格式,包含列名等:

image-20250803105917157

逻辑存储结构:

  • TableSpece:表空间

  • Segment:段

  • Extent:区

  • Page:页

  • Row:行

image-20250803110243774

MyISAM

MyISAM 是 MySQL 早期默认的存储引擎,其特点是:

  • 不支持事务,不支持外键

  • 表锁,不支持行锁

  • 访问速度快

MyISAM 使用的存储文件:

  • xxx.sdi:存储表结构信息

  • xxx.MYD:存储数据

  • xxx.MYI:存储索引

创建一个使用 MyISAM 引擎的示例表:

create table my_myisam(
    id int,
    name varchar(10)
) engine = MyISAM comment = '使用 MyISAM 引擎的示例表';

对应的存储文件:

image-20250803111012836

其中存放表结构的 sdi 文件是个文本文件,可以直接打开,其内容是 JSON 结构:

image-20250803111500480

Memory

Memory 存储引擎的表数据存放在内存中,因此最好只用于临时表或缓存用途(避免意外宕机导致的数据丢失)。其特点是:

  • 内存存储,访问速度快

  • hash 索引(默认)

对应的存储文件只包含 xxx.sdi(存储表结构信息)。

总结

存储引擎的区别:

特点 innoDB MyISAM Memory
存储限制 64TB 有 有
事务安全 支持 - -
锁机制 行锁 表锁 表锁
B+tree 索引 支持 支持 支持
Hash 索引 - - 支持
全文索引 支持(5.6版本之后) 支持 -
空间使用 高 低 N/A
内存使用 高 低 中等
批量插入速度 低 高 高
支持外键 支持 - -

存储引擎的选择依据:

  • InnoDB,对于事务完整性和并发下数据一致性要求高的场景使用,大部分业务场景都使用该引擎。

  • MyISAM,对于插入和读取性能要求高,且不常修改的场景,一般用于记录日志。但目前该功能已广泛被 mongoDB 替代。

  • Memory,记录需要高速读写,且不需要持久化的数据,一般用于缓存。但目前该功能已广泛被 Redis 替代。

参考资料

  • 黑马程序员 MySQL数据库入门到精通

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: MySQL 存储引擎
最后更新:2025年8月3日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号