小贝_mysql 常见存储引擎差别

存储引擎差别

简要:
1、存储引擎
2、myisam与innodb差别

 

一、存储引擎

1、什么是存储引擎

       通俗地讲就是存储和管理数据的方式

形象样例:

       某处地方的自行车管理员:李某。张某。每天都有非常多人来存取自行车。李某的管理方式是: 车主自行存放,李某也不记录对方存的是什么车。取车时则要交管理费。也不检查取的是否是对方自己的车。相反。张某。则在车主存放车时。记录存放人的特征以及相应车的信息。当人来取车时,张某还要小心核对。人与车的特征是否相应。

从上述样例可知:

a、从效率的角度来看: 李某比张某快,由于其不用进行校对

b、从安全性的角度来看: 张某比李某要安全,由于其进行了校对。

总结: 实际上,mysql的存储引擎也是这样工作,每种存储引擎都有自身的存取方式,因此在选择上,应该依据实际情况来定。

 

2、查看mysql全部引擎

mysql>show engines;

 

二、Myisam与Innodb的差别

之所以要区分这两种存储引擎,是由于它们是眼下使用最频繁的mysql引擎,因此有必要对它们进行区分。有利于在实际情况下进行灵活运用。

1、myisam存储引擎

a、表构成

建立表mytest

create table mytest(id int unsigned,content char(5))engine=myisam;

表相应磁盘的文件


总结:

a1、后缀名为:frm为表结构文件,MYD为数据文件,MYI为索引文件

a2、建立myisam引擎的表,都会建立这三个文件,在进行mysql数据库备份或转移时。方便操作

b、批量插入数据

插入1000行数据

 

c、查询表的条数


总结: 从截图能够看到mysiam有对表的行数进行记录,而不是须要一条条去记录

d、是否支持事务


总结: myisam不支持事务,因此假设你在数据库进行事务操作,可是事务无法成功。你就要看你的表引擎了,看这样的引擎是否支持事务。

e、对auto_increment列的操作(改动表mytest的id列)


插入数据


删除id为3的数据,然后在插入数据


这时发现。删除id为3后。继续加入的数据,id并非从3開始,而是跳过3。从4開始算起。

处理方案:

删除数据后,重置auto_increment




总结: myisam引擎的表会对表中auto_increment进行存放。存放在文件磁盘上。即使是重新启动服务,也不会丢失。

 

2、innodb存储引擎

a、表结构

建立表myinnodb表

create table myinnodb(id int unsigned,content char(5))engine=innodb;

当中,frm为表结构文件。ibd为数据和索引文件


b、批量插入数据 (插入1000行数据)

 

c、查询表总条数


总结: innodb引擎的表,在计算总行数时,是一条条算

d、是否支持事务


总结: innodb引擎表支持事务操作

e、对auto_increment列的操作(改动表myinnodb的id列)


插入数据


删除id为3的数据


继续插入数据


发现这样的情况跟myisam引擎的一致。

处理方案:


总结: innodb能够对auto_increment进行重置。但其对auto_increnment列仅被存储在主内存中。而不是存在磁盘上


重新启动服务

3、myisam与innodb的差别

 

myisam

innodb

文件构成

frm、MYD、MYI

frm、ibd

是否支持事务

MyISAM类型的表强调的是性能,其运行数度比InnoDB类型更快。可是不提供事务支持

InnoDB提供事务支持事务,外部键等高级数据库功能

计算表行数

select count(*) from table,MyISAM仅仅要简单的读出保存好的行数,注意的是。当count(*)语句包括   where条件时,两种表的操作是一样的

InnoDB 中不保存表的详细行数。也就是说,运行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

 

锁的粒度

表锁

行锁

对AUTO_INCREMENT的操作

存放在磁盘上,能够通过alter进行重置

仅被存储在主内存中。而不是存在磁盘上

 

4、表锁与行锁的差别

在运行数据库写入的操作(insert,update,delete)的时候。mysiam表会锁表,而innodb表会锁行。

通俗点说,就是你运行了一个update语句,那么mysiam表会将整个表都锁住,其它的insert和delete、update都会被拒之门外,等到这个update语句运行完毕后才会被依次运行。

而锁行,就是说,你运行update语句是。仅仅会将这一条记录进行锁定,仅仅有针对这条记录的其它写入、更新操作会被堵塞并等待这条update语句运行完成后再运行,针对其它记录的写入操作不会有影响。

 

5、myisam与innodb的选择

a、业务须要支持事务,选择innodb

b、业务查询居多。选择myisam

 

6、总结

MyISAM管理非事务表。

它提供快速存储和检索,以及全文搜索能力。假设应用中须要运行大量的SELECT查询,那么MyISAM是更好的选择。

InnoDB用于事务处理应用程序,具有众多特性,包含ACID事务支持。假设应用中须要运行大量的INSERT或UPDATE操作。则应该使用InnoDB,这样能够提高多用户并发操作的性能。


补充:

1、对于innodb的数据结构,首先要先理解两个概念性的问题:共享表空间以及独占表空间。

什么是共享表空间和独占表空间

共享表空间以及独占表空间都是针对数据的存储方式而言的。

共享表空间: 某一个数据库的所有表数据,索引文件所有放在一个文件里。默认这个共享表空间的文件路径在data文件夹下。默认的文件名称为:ibdata1初始化为10M。

独占表空间: 每一张表都将会生成以独立的文件方式来进行存储,每一张表都有一个.frm表描写叙述文件。另一个.ibd文件。

当中这个文件包含了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。


The quieter you become,the more you are able to hear。


转载于:https://www.cnblogs.com/ljbguanli/p/7161047.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值