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
联系客服