Mysql进阶篇-存储引擎
Mysql体系结构
连接层
接受客户端的连接,完成对连接的一些处理以及认证授权的操作,检查是否超过最大连接数等等。
服务层
大部分核心功能的实现场所,SQL接口,解析器,查询优化器,缓存和跨存储引擎的实现
引擎层
可插拔式的存储引擎,可以选择其中的一个引擎,也可以增加引擎。
存储引擎控制的是mysql中数据的存储和提取的方式,服务器通过api与存储引擎进行通信。
索引是在这一层实现的,不同存储引擎索引不同。
InnoDB是Mysql5.5版本后的默认引擎
存储层
数据库中的数据存储在磁盘中,包括一堆日志,索引…..
存储引擎简介
引擎就是发动机,机器的核心部分,且不同引擎不同的应用场景,没有好坏之分
存储引擎是Mysql特有的,就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以也叫做表类型。
查询默认引擎
show create table 表名;
查询当前数据库支持的存储引擎
show engines;
创建表时指定存储引擎
create table 表名(
name int comment ‘ok’
) engine = InnoDB (引擎名)
存储引擎特点
InnoDB
是兼顾高可靠性和高性能的通用存储引擎特点
DML操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键FOREIGN KEY 约束,保证数据的完整性和正确性
文件
xxx.ibd: xxx代表表名,innoDB引擎的每张表都会对应这样一个表空间文件(磁盘文件),存储该表的表结构(frm(早期),sdi),数据和索引。
参数: innodb_file_per_table –> 默认是打开的->表明每张表代表一个表空间文件
逻辑存储结构(有个印象)
- TableSpace 表空间
- Segment 段
- Extent 区
- Page 页
- Row 行
ibd文件属于表空间文件,表空间中存储的是段,段中包含区,区中包含页,一个页中包含行,一行中包含
- Trx id 最后一次操作事务的 id
- Roll pointer 一些指针
- 一堆 column
在InnoDB逻辑结构中Page是磁盘操作的最小单元,一个Extend区大小固定为1M,一个Page大小为16K,1Extend=16Page
MyISAM
介绍
MyISAM是Mysql早期的默认存储引擎
特点
不支持事务,不支持外键
支持表锁,不支持行锁
访问速度快
文件
xxx.sdi 存储表结构信息
xxx.MYD 存储数据
xxx.MYI 存储索引
Memory
介绍
Memory引擎的表数据是存储在内存之中,由于受到硬件问题,断电问题,只能作为临时表或者缓存来处理
特点
内存存放
支持hash索引(默认)
文件
xxx.sdi 存储表结构信息
它的数据都是存放在内存之中的,所以不需要存储数据,索引的文件
存储引擎选择
选择合适的
InnoDB
应用对事务的完整性有较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新,删除操作
MyISAM
应用是以读操作和插入操作为主,很少的更新和删除操作。现在大部分都被Nosql替代了,
Memory
临时表和缓存,但是太大表无法存放在内存中,数据安全性不能保障
注意
现在绝大部分场景都是使用InnoDB,MyISAM被MongoDB替代,Memory被redis替代,两者都属于Nosql
总结
这一章更多的是理论性
对存储引擎有个大概的了解,对Mysql体系有个大概的了解
今天是平安夜欸,yeebing跟我一起过平安夜
好吧只是在同一个办公室看电脑而已………