mysql存储引擎

我们往表里插入数据的时候这些数据最终都是存储在硬盘里的。
不同的文件系统组织文件的方式也是不一样的。
在mysql中数据到底是以何种方式存储在硬盘上都是由存储引擎决定的。不同的存储引擎
存储文件的方式是不同的。
查看mysql支持那些存储引擎:

show engines\G  (navicat中好像不支持\G)

这里挑出常用的三个, 【MyISAM】、【InnoDB】和【MEMORY】来谈一谈。
【Engine】 :存储引擎的名称。
【Support】 :意思为Mysql是否支持此存储引擎,YES是可以,NO是不可以,DEFAULT是默认。
【Comment】 :注释,说明。
【Transactions】 :此存储引擎是否支持事务。
【XA】 :此存储引擎是否分布式支持事务。
【Savepoints】 :此存储引擎是否支持保存点。
在这里插入图片描述在这里插入图片描述
此时我们可以看到只有默认的InnoDB存储引擎支持。【事务】、【分布式事务】、【保存点】
同时InnoDB的Comment中说明还支持。 【行级锁】和【外键】
如果想查看当前的存储引擎是什么?

show variables like '%storage_engine%';

在这里插入图片描述
可以看到当前默认的存储引擎是InnoDB。
在mysql5.5.8之前默认的存储引擎都是【myisam】,mysql5.5.8之后默认的是【InnoDB】。
那我们想查看当前的版本?

select version();

在这里插入图片描述
此时我的版本是8.0.21。

Myisam

支持全文索引;支持表级锁;不支持事务;不支持外键。
性能比较高,读取数据的速度比较快。
比如如果表中数据会大量频繁进行读取,很少写入,那么Myisam非常合适。
Myisam是如何存储数据的呢?
新建一个表,名为aa,存储引擎修改为myisam。

在这里插入图片描述
在这里插入图片描述
【aa.MYD】 :这里的D是data的意思,表里所有的数据都是存放在这个文件里的。
【aa.MY】 I:i的意思是index即索引,这个文件是存储索引的。
【aa_445.sdi】:元数据会冗余一份到sdi文件。
蓝色框中可以看出索引也是占用空间的,当表数据量较小的时候,索引的占用空间可能会比数据还大。

当前我的Mysql的默认存储引擎是【innodb】,想要修改为【myisam】

set default_storage_engine=myisam;

但是这只是临时修改,关闭mysql就会失效,如果想要永久修改,需要修改配置文件,然后进行重启。
在这里插入图片描述
在配置文件【my.cnf】中添加 【default_storage_engine=myisam】
在这里插入图片描述
InnoDB

支持外键;支持事务;支持行级锁。
在大并发量插入的情况下性能比较高。但是容易出现死锁。
表级锁:如果有一个数据在插入一张表的时候,那么其他数据必须等待它插入完成进后才能依次插入。
行级锁:大量数据插入的时候,按照每行进行插入。所以性能高。
默认情况下innodb使用的是共享表空间。
所有的表数据全部存放在ibdata1里面。

注意:mysql所说的表空间和oracle的表空间不是一个意思。
是否可以把不同的innodb表的数据放在不同的文件里呢?
这就需要开启独立表空间。就是把不同的innodb表的数据放在不同的文件里。
首先查看独立表空间的状态是否开启,我这边是已经开启了。

show variables like '%innodb_file%';

在这里插入图片描述
如果状态为OFF,那就在配置文件中添加innodb_file_per_table 即可 。
在这里插入图片描述
这时候有个问题,就是在独立表空间开启之前的共享表不会自动变为独立表空间。
需要使用命令进行更改想要变为独立空间的表

alter table 表名 engine-innodb;

如果使用共享表空间,存储量非常大的时候,我们可以用其他文件来存储数据。
需要在配置文件中增加默认的存储表空间。
在这里插入图片描述
此时红线的意思是:当ibdata1的小大达到了202M的时候,再有数据插入的时候,就不会往ibdata1里写了,而是往ibdata2里面写了,ibdata2的初始大小是10M。
注意:ibdata1的大小不是随便写的,而是根据现在的存储量,现在的ibdata1存储量是202M
因为如果填写了210M,下次的数据量超过8M,可能会丢失数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值