打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
UC头条:[后端面经
userphoto

2023.06.10 山西

关注

MySQL的存储引擎

1.MyISAM

2.InnoDB

3.MEMORY

4.MERGE

5.总结

6.参考博客

MySQL的存储引擎

mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。

查看当前数据库的默认存储引擎showvariableslike'default_storage_engine';

查看当前数据库所支持的存储引擎showengine;//语句1showvariableslike'have_%';//语句2

查看支持事务处理的存储引擎selectenginefrominformation_schema.engineswheretransactions='yes';

设置新表的存储引擎createtable表名(字段名字段类型)engine=存储引擎;//语句1createtable表名(字段名字段类型)type=存储引擎;//语句2

1.MyISAM

文件组成

.frm文件:表结构定义,frame,可以理解成对整体框架的存储

.MYD文件:数据文件,存储的是具体的数据库数据条目

.MYI文件:索引文件,存储的是数据库表项的索引文件

如果用图书管理系统做比喻的话,那么,.frm文件存放的是书架本身,.MYD文件存储具体的书籍,.MYI文件存储检索书籍的索引目录。

.MYI文件和.MYD文件可以存储在不同的文件目录中,从而分散IO读写压力,提高访问速度,具体操作可在创建表的时候,通过DATADIRECTORY和INDEXDIRECTORY属性进行设置。

适用范围

由于MyISAM不支持事务,不支持外键,访问速度快的特点,适用于以下特点的数据库:

-不要求事务完整性

-操作主要是查找SELECT和INSERT

安全性

MyISAM表中有一个标志,用于存储上次退出表是否是正常退出,每次启动该表之前会检查该标志,如果上次是异常退出,则考虑进行检查和修复。

可使用CHECKTABLE和REPAIRTABLE命令进行表的检查和修改。

支持的存储格式

静态表:每个条目长度固定

动态表:每个条目长度不固定

压缩表:压缩存储,节省空间

三者的特点如下所示:

点击加载图片

优缺点

优点:访问速度快,

缺点:不支持事务,不支持外键,不支持行级锁,不支持崩溃后的安全恢复,不支持并发插入(性能方面)

2.InnoDB

自动增长列

指的是InnoDB支持用户手动插入的条目遵循索引项的自动增长,而不需要用户自己设置。

然而,在InnoDB中,自动增长列必须是索引项,如果是组合索引,则是其中的第一列;而对于MyISAM,则可以是任意数据项。

创建一个表之后,其自动增长列的起始值默认是1,也可以在创建表的时候进行修改:

CREATETABLEt1(idINTNOTNULLAUTO_INCREMENT,nameCHAR(30)NOTNULL,PRIMARYKEY(id))ENGINE=InnoDBAUTO_INCREMENT=某个起始数字;

在插入条目的时候,也可以通过ALTERTABLE命令进行修改:

ALTERTABLE具体条目AUTO_INCREMENT=某个起始数字;

外键约束

在本文介绍的四个存储引擎中,只有InnoDB支持外键约束。

外键约束可以指定数据表中,对父表的操作如何影响子表,具体参数如下:

restrict:父表的删除和更新不会对子表产生影响

cascade:级联操作,父表的删除和更新操作会影响子表,

setnull:父表的删除和更新将会使得子表中相关条目设置为null值

noaction:效果等同于restrict,父表的删除和更新操作不会对子表产生影响。

外键约束的开关

根据setforgein_key_checks=0或者1的值,可以开启(值为1)或者关闭(值为0)外键约束。

优缺点

优点:支持回滚等事务处理

缺点:访问效率低,花费内存存储索引结构,占用内存较大

3.MEMORY

使用内存内容

MEMORY表使用内存中的数据进行存储管理,因此,在使用期间需要足够的内存空间,当使用结束之后,需要进行内存释放,命令如下DROPFROMMEMORY表名;TRUNCATEtable表名;

hash结构

MEMORY表的索引结构为hash,因此,有很快的访问速度,但是也引申出对于数据库操作指令的响应性能问题:

相等比较:=,<=>,性能较好

范围比较:>,<,BETWEEN,IN,LIKE,性能较差

排序比较:orderby,性能较差

可通过改进为B树结构来提高性能

文件组成:

使用内存中的数据来存储,只需要一个.frm文件,用于存储表结构定义。

固定长度存储

创建该表的时候,需要设置固定长度,内部的条目长度固定,可设置最大行数来确定所需要的内存大小,max_heap_table_size参数用于设置最大行数。

因此,对于TEXT、BLOB等可变长度数据类型并不支持,但是对于VARCHAR数据类型,在实际的数据库操作中依然看作固定长度,因此可支持VARCHAR数据类型。

优缺点

根据上文的分析,可得出MEMORY表的优缺点如下:

优点:访问速度快,使用hash存储对于相等比较操作性能良好,使用内存中的数据而不用额外生成新文件

缺点:只支持固定长度的数据条目,对于可变长度的数据类型不支持,且使用hash索引,对于范围、排序类的数据比较操作性能较差,需要额外释放内存。

4.MERGE

文件组成

.frm:存储表的框架信息

.MRG:存储表的定义信息

具体操作

Merge存储引擎相当于MyISAM的一个集合,需要多个表结构相同的MyISAM组合,本身并不存在数据,仅仅是一个结构,增删改查等操作还是需要对于具体的MyISAM表进行操作。

优缺点

优点:管理多个MyISAM表,方便操作

缺点:本身是多个MyISAM表的复合表,因此,MyISAM表的缺点都有。

5.总结

对上述四种存储引擎进行比较,得出如下表格:

点击加载图片

6.参考博客

参考博客-1

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Mysql存储引擎详解(MyISAM与InnoDB的区别)(转)
超详细的MySQL工作原理 体系结构
MYSQL存储引擎
MySQL数据库的体系架构
Mysql相关操作
Mysql进阶篇(一)之存储引擎
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服