MySql存储引擎详细介绍

MySql存储引擎是什么?

其实,我们可以通俗的理解成存储技术或者存储策略,mysql可以对不同的表使用不同的存储策略,来管理表数据,从而达到不同的使用感受。

以下是百度百科解释:

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

MySql存储引擎有哪些?

不同的mysql版本所支持的存储引擎略有差异,我们可以自己查询当前mysql所支持的存储引擎,命令:show engines;

我当前使用的mysql版本是5.6.43,默认引擎是InnoDB,而在早期的mysql版本(有说5.1之前,有说5.5之前的,我没有自己测过,不过这不重要,重要的是会自己查看)中默认引擎是MyISAM。

Mysql可以自己设置默认引擎,也可以建表时指定,具体方法如下:

    1.设定数据库默认引擎

修改mysql安装目录中的配置文件my.ini或my.cnf,在配置文件的[mysqld]配置下新增default-storage-engine=InnoDB,保存后重启服务。

    2.建表时指定引擎

create table test(id int)engine=MyISAM;

    3.修改已建表的引擎

alter table test engine=InnoDB;

上面的engine关键字也可以用type,不过type是早期的关键字,已经不建议使用。

各类存储引擎介绍

存储引擎 特点介绍
innodb

 1.是mysql唯一支持事务的引擎;

 2.支持行锁,所以支持并发读写;

 3.有且仅有一个聚簇索引(key一般都是主键),其叶子节点存放具体数据;其他索引为二级索引(辅助索引),叶子节点存放聚簇索引中的key值;

 4.缓存数据;

myisam

 1.对表数据行数单独记录,所以大表count(*)会很快;

 2.不支持行锁,支持表锁,所以修改操作都是全表的排他锁,并发性能不好;

 3.非聚簇索引,主键和其他索引节点保存的都是数据行在内存中的物理地址

 4.只缓存索引,不缓存数据;

mrg_myisam它是一组相同表结构的myisam表的集合,有点像视图,定义和删除都不会影响原数据,是对它所管理的所有myisam表的union操作。
memory memory表数据存储在内存中,所以读写性能很高,但是内存占用率高,而且数据库重启后数据会丢失,适合临时表。
blckhole 黑洞,任何写入的数据都会消失,select操作永远得不到数据,但是会记录binlog日志,可用于日志分析,也可以用于主从架构中实现数据同步。
archive

 1.只允许插入和查询,不能修改和删除;

 2.只支持自增ID列上加索引;

 3.提供压缩功能,数据占用磁盘空间更少;

 4.性能很高,如果有数据不让修改和删除,可以考虑使用;

csv

 1.数据以csv文本方式存储(不同于其他引擎的二进制存储),可以直接编辑相应的文件进行修改;

 2.所有列不能为null,不支持索引;

不管是哪种引擎,对应的表结构都会保存在{tableName}.frm文件中,路径通常为mysql/data/{dbName}/{tableName}.frm

InnoDB和MyISAM

Mysql存储引擎很多,但是最长用的还是innodb,而一般讨论较多的则是innodb和myisam,下面就几点分析二者的差异;

1.innodb支持标准ACID事务,适合于我们开发中很多需要事务的场景,而myisam本身不支持事务,如果使用,我们需要自己在代码层面去做控制;

2.innodb支持行锁,而myisam直接是表锁,意味着,当并发操作高时,myisam性能会很差,myisam适合多读操作;

3.myisam会单独存储表数据总数,而innodb不会,所以当我们对大表进行select count(*)时,myisam直接返回计数,性能很高,而innodb需要全表扫描统计,故而性能差;当然当我们select count(*)带有where条件时,两者差不多;

4.innodb表结构文件名为{tableName}.frm,数据和索引共存一个文件{tableName}.ibd;

myisam表结构文件名为{tableName}.frm,索引文件为{tableName}.MYI,数据文件为{tableName}.MYD;

5.innodb使用的是聚簇索引,myisam使用非聚簇索引,关于聚簇索引和非聚簇索引请参考:https://blog.csdn.net/firstendhappy/article/details/104626361

6.innodb崩溃恢复能力好,而myisam相对很差(myisam只将数据写到内存中,再由操作系统定期写到磁盘上)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值