来源于存储引擎的使用和使用说明书(一)-来源于

目录

文章部份来始于黑马Mysql视频教程当中!

一、MySQL体系结构

如右图,Mysql总共分为了四层:

图片[1]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

二、存储引擎简介

引擎就是底盘,引擎就是一个机器的核心部份,不同的引擎有着不同的应用场景,诸如客机有客机的引擎,湖人有鹈鹕的引擎,她们之间是没有优劣之分的,我们只须要在合适的场景使用合适的引擎就可以了。

Mysql储存引擎就是储存数据、建立索引、更新/查询数据等技术的实现方法。储存引擎是基于表的,而不是基于库的,所以储存引擎也可被称为表类型。

三、存储引擎的使用

(1)创建表的时侯可以通过ENGINE来指定储存引擎:

图片[2]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

(2)查看当前数据库支持的储存引擎:

创建表的时侯如果不指定引擎,默认就是InnoDB,在mysql初期的时侯默认储存引擎是MyISAM。其中comment列就是官方对当前储存引擎的特点描述!

图片[3]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

(3)查看某张表使用的储存引擎

如下sql可以查看当前表结构:

show create table 表名;

图片[4]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

四、存储引擎特性

这儿重点解释三个储存引擎,同时也是笔试当中常常会问的!

1、InnoDB

InnoDB是一种兼具高可靠性和高性能的通用储存引擎,在MySQL5.5以后,InnoDB是默认的MySQL储存引擎。

(1)特征:

DML操作遵守ACID模型,支持事务;行级锁,提升并发访问性能;支持字段FOREIGNKEY约束,保证数据的完整性和正确性;

(2)不管是那个引擎,数据肯定都是储存在硬碟的,我们可以通过以下命令查看储存位置:

SHOW VARIABLES LIKE 'datadir';

图片[5]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

按照查询的位置打开,之后会发觉每位数据库就是一个文件夹

图片[6]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

之后任意打开一个库进去会发觉都是frm文件!

frm文件是拿来保存每位数据表的元数据信息,包括表结构的定义等。根本没有找到对应的数据文件,这是为何呢,继续往下看!

图片[7]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

(3)储存文件:

正常innodb引擎储存表的时侯会有两个文件,一个是frm文件,一个是ibd文件。

Xxx.ibd:xxx代表的是表名,innoDB引擎的每张表还会对应这样一个表空间文件,储存该表的数据和索引。

但是我们在里面并没有看见ibd文件,这是由于mysql将储存方法分为了两种:

可以通过innodb_file_per_table参数来开启独立表空间,mysql8.0默认是打开了独立表空间,其余似乎默认都是关掉的。

innodb_file_per_table的简略说明:

在好久好久曾经也就是说还没有innodb_file_per_table的那种年代,所有的innodb表的数据都是保存在共享表空间,在有了innodb_file_per_table参数后innodb可以把每位表的数据单独保存。单独保存有两方面的优势一个是便捷管理,二个是提长性能。

show global variables like 'innodb_file_per_table';  -- 查看
set @@global.innodb_file_per_table=off;      -- 关闭
set @@global.innodb_file_per_table=on;       -- 打开innodb_file_per_table

innodb_file_per_table参数,mysql8.0默认是打开的,假如打开就代表的是每一张表对应了一个表空间。我的mysql是5.5版本的,所以根本没有开启,没有开启着意味着所有数据共用了一个表空间(也可以称为数据文件)。

(4)共享表空间文件上哪找?

默认配置下有一个初遇大小为10M,名为ibdata1的文件,默认的表空间文件(tablespacefile)。通过参数innodb_data_file_path可以设置文件

show global variables like 'innodb_data_file_path'; #查看表空间文件设置

图片[8]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

解释ibdata1:10M:autpextend:代表的是表空间文件名为ibdata1,之后初始大小为10M,文件可以手动下降(autoextend)。

(5)通过以上命令我们晓得表空间文件名称为ibdata1,这么他储存在哪些地方?

他储存在我们安装mysql的时侯指定的安装目录下,假如忘掉安装目录了,可以通过全局搜文件名称,来找寻文件!

整个mysql所有库的数据都储存在下边文件当中!

图片[9]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

(6)可以更改共享表空间设置:

表示将/db/ibdata1和/dr2/db/ibdata2两个文件来组成表空间,其中ibadata1的大小为2000Mmysql 表空间清理 碎片整理,文件ibdata2的大小为2000MB,假如用完了这2000MB,该文件可以手动下降(autoextend)。

innodb_data_file_path=/db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend

(7)将innodb_file_per_table打开

set @@global.innodb_file_per_table=on;       -- 打开

打开后他不会将历史的表早已共享的给单独独立上去,而是指的之后在新建表的时侯,这么新建的表就是单独的表空间。

打开后新建了一个test表:

图片[10]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

通过MySQL的ibd2sdi工具可以解析ibd文件,可以解析成json数据。

(8)innodb储存结构:

说是innodb储存结构,不如说是ibd文件的储存结构!

page页是innodb储存结构当中最小的单元

图片[11]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

具体了解储存结构的话内容有好多,后续写一篇专门剖析储存结构的文章!

2、MyISAM

MyISAM是MySQL初期的默认储存引擎。这也就是常常笔试问Innodb和MyISAM区别的缘由!

(1)特性:

不支持事务不支持字段支持表锁,不支持行锁访问速率快

(2)储存文件:

一个表对应了三个文件mysql 表空间清理 碎片整理,而innodb对应了两个文件!

图片[12]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

3、MEMORY

MEMORY引擎的表数据是储存在显存中的,因为遭到硬件问题、或断电问题的影响,只能将这种表作为临时表或缓存使用。

(1)特性:

显存储存hash索引(默认)

(2)储存文件:

xxx.sdi:储存表结构信息

五、存储引擎选择

图片[13]-来源于存储引擎的使用和使用说明书(一)-来源于-唐朝资源网

在选择储存引擎时,应当按照应用系统的特征选择合适的储存引擎。对于复杂的应用系统,还可以依据实际情况选择多种储存引擎进行组合。

在问你InnoDB和MyISAM的区别的时侯,只须要围绕这三点来回答:事务、外键、行级锁

© 版权声明
THE END
喜欢就支持一下吧
点赞82赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容