我们通常使用客户端连接器来连接Mysql服务;例如navicat图形化工具,Java中的jdbc等
Mysql可以分为以下四层:
- 连接层:提供mysql的连接池、以及对请求进来的连接进行认证等服务;
- 服务层:用来对外提供服务,包含sql接口、sql解析器、sql优化器、缓存等服务;
- 引擎层:包含一些存储引擎
- 存储层:用来存放数据、系统文件、日志等
存储引擎是存储数据、建立索引、进行查询和更新的实现基础;
存储引擎是基于单个表,而不是基于库
# 查看支持的存储引擎
show engines;
# innodb_file_per_table:决定使用innodb引擎的每张表一个文件;默认值为ON打开
show variables like 'innodb_file_per_table';
我们经常使用的存储引擎有以下几种:InnoDB(5.7开始默认)、MyISAM(5.7之前默认)、MEMORY等
简单介绍下以下几种
| 事务 | 外键 | 锁形式 | |
|---|---|---|---|
| InnoDB | 支持 | 支持 | 行级锁 |
| MyISAM | 不支持 | 不支持 | 表级锁 |
| MEMORY | 不支持 | 不支持 | - |
文件存储形式:xxx.ibd,xxx指的是表名,innodb每张表对应一个ibd表空间文件,存储了表结构、数据、索引信息;查看系统变量innodb_file_per_table可以看到默认是ON,即每张表对应一个ibd文件
Innodb逻辑存储结构
以下依次为包含关系,例如表空间包含多个段,段包含多个分区
- TableSpace:表空间
- Segment:段
- Extent:分区,一个分区最大1M
- Page:页,一个分区最多64个Page,一个Page页默认大小16kb;每个页最多存放7992行记录(16KB除以2~200)
- Row:数据行,里面有Trx id(当前事务id)、Roll pointer(指针)、col1、col2、……

文件:
- xxx.sdi:存放的是表结构相关信息
- xxx.MYD:存放的是数据
- xxx.MYI:存放的是索引信息
特点:不支持事务,不支持外键,只能使用hash索引;数据都存放在内存中,常用来做缓存或者临时表
文件:只有sdi文件存放表结构相关信息,因为数据都在内存中
另外附上三种存储引擎的特点总结
