目录
1:Mysql体系结构图:
2:存储引擎简介
3:存储引擎特点
InnoDB存储引擎:
MyISAM存储引擎:
Memory存储引擎:
4:存储引擎选择
5:存储引擎小结
1:Mysql体系结构图:
MySQL Server(服务端)它是分层的
第一层:连接层
它主要用来进行与客户端的连接,认证授权,连接限制什么的,像我们连接mysql输入账号密码,MySQL服务端的连接层就会进行账号密码的认证,校验每个客户端的权限
第二层:服务层
绝大部分的功能都是在服务层完成:像SQL接口,解析器,查询优化器,缓存,而所有跨存储引擎的实现:像DML,DDL都是在服务层实现
第三层:引擎层
存储引擎控制就是 我们mysql 中数据的存储和提取的方式,服务器通过API和存储引擎进行通信,图中这几个蔚蓝色的圆筒就是存储引擎,可以选用哪种如果引擎不能满足可以加入其他引擎,所以也被称为可插拔存储引擎层
index:索引是在存储引擎层实现的,不同的存储引擎索引结构是不同的,在mysql5.5.0以后mysql的默认存储引擎是InnoDB存储引擎
第四层:存储层
数据库中的数据存在磁盘当中的,所有存储层主要就是为了存储数据库中的数据
这个里面包含一系列的日志:Redo,Undo,数据日志,索引日志,错误日志等等!
2:存储引擎简介
存储引擎的概念:
存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型,一个数据库下的多张表,每张表可以有不同的存储引擎
--查询建表语句
show create table account;
如果在建表的时候没有选择存储引擎,默认是InnoDB
--查看当前数据库支持的存储引擎
show engines
InnoDB:Support,是默认,支持事务,行级锁,支持外键
MyISAM:早期Mysql默认的存储引擎
MEMORY:存储到内存中,做临时缓存
3:存储引擎特点
InnoDB存储引擎:
介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。
特点:
DML操作遵循ACID模型,支持事务;DML:增删改
行级锁,提高并发访问性能;
支持外键FOREIGN KEY约束,保证数据的完整性和正确性;
文件:
xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,这个文件存储了这个表的结构(frm,sdi),数据和索引。在mysql8.0之后frm都被整合到表空间文件中
参数:innobd_file_per_table
show variables like 'innodb_file_per_table';
如果该参数开启,代表对于InnoDB引擎的表,每一张表都对应一个ibd文件。 我们直接打开MySQL的 数据存放目录: C:\ProgramData\MySQL\MySQL Server 8.0\Data , 这个目录下有很多文件 夹,不同的文件夹代表不同的数据库,我们直接打开itcast文件夹。
可以看到里面有很多的ibd文件,每一个ibd文件就对应一张表,比如:我们有一张表 account,就 有这样的一个account.ibd文件,而在这个ibd文件中不仅存放表结构、数据,还会存放该表对应的 索引信息。 而该文件是基于二进制存储的,不能直接基于记事本打开,我们可以使用mysql提供的一 个指令 ibd2sdi ,通过该指令就可以从ibd文件中提取sdi信息,而sdi数据字典信息中就包含该表 1 show variables like 'innodb_file_per_table'; 的表结构。
InnoDB逻辑存储结构:
TableSpace:表空间,表空间包含段(Segment)
Segment:段:段里面又包含区(Extent)
Extent:区,里面包含页(Page)一个区的大小是1M
Page:页,里面包含(Row)一页的存储大小是16K,页里面包含的就是表中每一行的数据
Row:行,存储事务相关的,指针节点,表的每个列
MyISAM存储引擎:
介绍:是Mysql早期的默认存储引擎
特点:不支持事务,不支持外键,支持表锁,不支持行锁,访问速度快
以MyISAM为存储引擎的表,会生成三个文件(MYD文件:存储表数据,MYI文件:存储表的索引,SDI文件:表结构)这是Mysql8.0生成三个文件,MySQL5.5表结构存储文件是frm文件
Memory存储引擎:
介绍:存储引擎的表数据是存储在内存中的,由于受到硬件问题,或断电问题的影响,只能将这些表作为临时表或缓存使用
特点:
内存存放:(由于在内存中存放数据,所以访问速度很快)
hash索引(默认)
文件:xxx.sdi:存储表结构信息(mysql8.0)
xxx.frm:存储表结构信息(mysql5.5)
注意:InnoDB存储引擎和MyISAM存储引擎的区别
4:存储引擎选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据 实际情况选择多种存储引擎进行组合。
InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要 求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操 作,那么InnoDB存储引擎是比较合适的选择。
MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完 整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。 MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。
MEMORY的缺陷就是 对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。
5:存储引擎小结
1,体系结构
连接层:连接客户端,认证权限校验等
服务层:处理一下Sql结构,对数据库中数据进行就该
引擎层:不同表可以有不同的存储引擎,索引在存储引擎中
存储层:数据库中的数据,结构,索引,日志都是落地在磁盘文件中
2,存储引擎简介
两条指令:
show engines;#查看所有的存储引擎
第二条指令:
创建表的时候可以指定哪种存储引擎
3,存储引擎特点
INNODB与MyISAM:事务,外键,行级锁
4,存储引擎应用
INNODB:存储业务系统中对于事务,数据完整性要求较高的核心数据。
MyISAM:存储业务系统的非核心事务。