MySql存储引擎
1、MySql存储引擎
1.1、什么是存储引擎
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
1.2、存储引擎是面向的对象是表还是数据库
结论:存储引擎面向的对象是数据库表。
解释:在一个数据库中我们可以使用多个存储引擎,通过MySql的可视化工具Navicat,我们在建表的时候就可以看出有选择存储引擎的地方,如下图所示:
1.3、不同的存储引擎在磁盘上的结构
进入我们MySql安装之后的data目录下,选择查看的数据库,会出现如下图所示:
首先我们建立两张表,一张存储引擎是innodb,一张存储引擎是myisam,如图所示:
如图所示,我们会发现每一张表都会对应几个文件,这里我创建了一张innodb存储引擎和一张myisam存储引擎的表,对应上图中的下面红框里的东西,如图所示:
注:如上图所示,有的人在查看的时候应该还会有一张.frm结尾的表,这个文件是描述表结构的一个文件,MySQL8.0以后没有.frm了,元数据都存在系统表空间里。
文件结尾 | 文件内容 |
---|---|
.frm | frame,数据表结构的信息 |
.ibd | Innodb的index(索引)和data(数据),存放在一个文件中 |
.MYD | Myisam的data(数据) |
.MYI | Myisam的index(索引) |
1.4、Myisam和Innodb查询数据的步骤
1.4.1、Myisam查询数据
通过上面可知,Myisam存储引擎每张表对应在磁盘上有三个文件,.frm,.MYD,.MYI,所以,数据表的数据和索引是分开的,在查询数据时,需要先从索引去找,然后再连接另外一个文件查询数据,有点类似于回表的概念,详情如下图所示:
1.4.2、Innodb查询数据
Innodb存储引擎对应的是两张表,它将索引和数据存放在了一起,所以,Innodb使用的是B+Tree的存储结构,索引查询完成之后可直接获取到数据,如下图所示: