myisam与innodb区别 MYI/ibd表

2015年07月26日 13:35 by:佚名网友

mysql 目前使用最频繁的两种存储引擎 myisam与innodb

MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

myisam与innodb区别

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

从上述例子可知:

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

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

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

查看mysql 所有引擎

  1. mysql>showengines; 
  2. 另一篇:查看修改mysql表索引引擎的命令

二、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进行重置

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

表锁与行锁的区别

在执行数据库写入的操作(insert,update,delete)的时候,mysiam表会锁表,而innodb表会锁行。通俗点说,就是你执行了一个update语句,那么mysiam表会将整个表都锁住,其他的insert和delete、update都会被拒之门外,等到这个update语句执行完成后才会被依次执行。

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

标签:myisam innodb MYI ibd