MySQL数据库系列(二):MySQL数据库的存储引擎

mysql存储引擎熟知的主要是myISAM、InnoDB。myISAM和InnoDB到底有什么区别呢,都常说如果项目上使用到事务就用InnoDB,如果对事务无要求就用myISAM,查询速度更快。除了这两个存储引擎还有那些呢,虽然不常用,但是还是要做个了解,万一遇到合适的场景,到时候就没有那么慌啦。这篇内容主在了解,不做详细原理解释。

mysql存储引擎

mysql数据的存储引擎是很多的,想查看你使用的数据库有哪些引擎,一个命令可以帮助你。↓↓

show engines;

执行命令后得到的结果如下:

在这里插入图片描述

共有9种存储引擎,从这些列出的引擎中,InnoDB是默认的,因为从mysql5.6及以后,mysql数据库默认的引擎就是他。在没有了解这方面的知识之前,只知道有InnoDB和MyISAM,知识匮乏到我自己都发指。

这些引擎的特性就不一一的说,有几个有意思的,有可能被用到的说一下,做个mark,了解一下。

存储文件

存储引擎各有不同,不同的存储引擎存储数据的方式是不一样的,另外在电脑中形成的文件也是不同的。其中不会变得就是表的结构文件xx.frm,存储的是数据库表的结构。

CSV

这个存储引擎在存储数据的时候采用的是类似于excel表格的方式,如果接触过财务报表的,可能会知道这个文件,可以直接用excel打开。用excel打开后是可以进行编辑,保存后是可以在数据库中查询的。

在磁盘上的体现是三个文件,分别是xx.csm、xx.csv、xx.frm。

  • xx.csm:用来存储表的元数据,如表的状态、数据量等
  • xx.frm:用来存储表的结构
  • xx.csv:用来存储具体的数据,如上面说的,这个文件就是可以用Excel表格打开,并可以编辑的

特性:

  • 以CSV格式进行数据存储
  • 所有列都不可以为null
  • 不支持索引
  • 可以对CSV文件直接编辑
Memory

看名字就知道,这个存储引擎存储的数据是在内存中实现的,很容易可以想到这个引擎可能会导致内存溢出,也不能保证数据的安全性,当宕机或者重启的时候,数据就会丢失。在磁盘文件上也是有所体现的,只有xx.frm表结构文件,没有存储数据的文件。

特性:

  • 又被称为Heap存储引擎,数据存储在内存中
  • 支持hash的btree索引
  • 所有字段都是固定长度,长度为10,其中varchar和char是等同的
  • 不支持text或者blog大字段
  • 使用表级锁

此表的数据在内存中,如果是做短期的聚合数据存储是可以的,再者数据容易丢失,不能用于重要的数据存储。

Federated

这个引擎只会存储数据表结构,不存具体的数据,具体的数据需要通过远程连接其他表得到,只要保证Federated引擎下对应的表结构和远程连接的表结构相同即可。这让我想起了以前东家的数仓(数据仓库),他们可能就是采用远程连接的方式实现,也就是Federated存储引擎。

特点:

  • 提供访问远程MySQL服务器上表的方法
  • 本地不存储数据,数据全部放在远程MySQL数据服务器中
  • 本地存储表结构和远程服务的连接信息

使用方式:

create table `local_user`(
	`id` int(11) not null auto_incerment,
    `userName` varchar(32) not null default '',
    `phone` varchar(11) not null default '',
    primary key (`id`)
) engine = fedreated charset=uft8 connection = 'mysql://root:root@127.0.0.1:3306/remote/t_user'
InnoDB

InnoDB存储引擎是最常用的一种,可以说现在的百分之九十以上的公司,都是使用的这个存储引擎,因为在正常的一个应用服务里面都是需要事务的支持。

特性:

  • InnoDB是事务性存储引擎,支持事务,也是MySQL内唯一一个支持事务的存储引擎
  • 完全支持事务的ACID特性
  • InnoDB支持行锁、页锁和表锁,在使用得当的时候,可以有效的提高数据库的并发程度

在MySQL5.6版本之前,InnoDB默认是采用系统表空间,但是5.6以后就默认采用了独立表空间。

系统表空间:一个MySQL数据库中,存储的数据都是放在一个系统级的文件中,也就是所有表的数据都存储在同一个文件中。

独立表空间:每个表的数据对应一个数据文件,互不干扰。

独立表空间和系统表空间的比较:

  • 系统表空间无法简单的收缩文件的大小
  • 独立表空间可以通过optimize table收缩文件
  • 系统表空间会产生IO瓶颈,在数据量大的时候,读取效率较独立表空间慢
  • 独立表空间可以同时向多个文件刷新数据,因为每个表对应的存储文件是独立的
MyISAM

此存储引擎只支持表锁,表锁对应的有写锁(独占锁)和读锁(共享锁),如果表的数据被频繁的修改,这样就会导致数据库的读写操作效率变低。因此MyISAM用在只读数据库来说是更有优势的。

特性:

  • 并发锁级别-表级锁
  • 支持全文检索
  • 不支持事务
  • 支持数据压缩
MyISAM和InnoDB的比较

MyISAM和InnoDB是mysql数据库中最常用的两个引擎,下面比较一下两个引擎的区别。

对比项MyISAMInnoDB
主外键不支持支持
事务不支持支持
行表锁表锁
不适合高并发的读写操作
行锁
适合高并发操作
同时也支持表锁和页锁
缓存只缓存索引,不缓存真实数据不仅缓存索引,还要缓存真实数据,对内存要求高
表空间
关注点性能事务
默认安装YY

总结

对于数据库的了解知识存储引擎是完全不够的。比如InnoDB的事务特性、隔离级别是怎么实现的,如行锁、表锁、独占锁、共享锁都是怎么一个工作机制,如悲观锁和乐观锁有什么区别,如行锁在什么情况下会失效升级为表锁,如数据库索引的Hash和Btree是怎么实现的,如聚集索引和非聚集索引又是怎么个情况,等等。都是工作中必须了解的东西。期待后期更新吧,我们一起学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值