Mysql体系结构
在MySQL Server服务端是分层的
- 连接层:接受客户端连接,完成一些连接的处理和认证授权,校验用户名和密码等操作
- 服务层:绝大多数操作、跨存储引擎的操作都在这一层
- 引擎层:控制数据如何来存,如何来组织。可插拔存储引擎,有多种引擎选择,可以添加或者去掉某些引擎
(注意:index索引是在存储引擎层实现的,所以不同存储引擎的索引结构不一样)
- 存储层: 存储数据库的数据,包括数据、日志,都存在磁盘中
存储引擎简介
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型
- 在创建表时,指定存储引擎
create table 表明(
字段1 字段1类型 [COMMENT],
...
字段 n 字段n类型 [COMMENT]
)engine = InnoDB [COMMENT];
- 查看当前数据库支持的存储引擎
SHOW ENGINES;
InnoDB
介绍:
InnoDB是兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后, InnoDB是默认的MySQL存储引擎
特点:
- DML操作遵循ACID模型,支持事务;
- 行级锁,提高并发访问性能
- 支持外键FOREIGN KEY约束,保证数据完整性和正确性
文件:
xxx.ibd: xxx代表的是表名,innoDB引擎的每张表都会对于这样一个表空间文件,存储该表的表结构(frm, sdi)、数据和索引
逻辑存储结构:
Trx id---最后一次操作的事务id Roll Pointer----一些指针 后面col就是字段
MylSAM
早期MySQL的默认存储引擎
特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
文件
- xxx.sdi: 存储表结构信息
- xxx.MYD: 存储数据
- xxx.MYI: 存储索引
Memory
Memory引擎的表数据是存储在内存中的,由于收到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用
特点
- 内存存放
- hash索引(默认)
文件
xxx.sdi: 存储表结构信息
InnoDB & MylSAM & Memory
重点看InnoDB和MylSAM的三个黄色的区别
存储引擎的选择
- InnoDB: Mysql默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择
- MylSAM: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,可以选择 (被MonGoDB取代了)
- MEMORY: 将数据都在保存在内存,访问速度快,常用于临时表和缓存。缺点就是对表大小有限制,太大的无法缓存在内存中,而且无法保证数据安全性(被Redis取代了)
本文章使用limfx的vscode插件快速发布