Mysql Innodb和Myisam引擎区别

1.事务和外键

Innodb具有事务,支持4个事务隔离级别,回滚,事务,如果应用中需要执行大量的insert和update操作,则应该使用innodb。这样可以提高多用户并发操作的性能。
MyISAM管理非事务的表,提供高速存储和检索,以及全文检索能力。如果应用中需要执行大量的select查询,那么myisam是好的选择。

2.锁

mysql 支持三种锁级别:行锁,页锁和表锁
MyISAM支持表锁定
Innodb支持行锁,Innodb表的行锁也不是绝对的。如果执行一个sql语句时,mysql不能确定要扫描的范围,innodb表同样会锁住全表。

3.存储

MyISAM在磁盘上存储成三个文件,.frm文件存储表的定义,.MYD数据文件 , 索引文件扩展名 .MYI
Innodb,基于磁盘的资源是Innodb表空间数据文件和它的日志文件,Innodb表的大小只受限于操作系统文件大小。
MyISAM转移数据比较方便。

4.索引

Innodb 索引组织表,使用聚簇索引,索引就是数据,因此能缓存索引,也能缓存数据
MyISAM 堆组织表,使用非聚簇索引,索引和文件分开,随机存储,只能缓存索引。

5.并发

MyISAM读写互相阻塞,不仅会在写入的时候阻塞读,也会在读取的时候阻塞写。
Innodb读写阻塞与事务隔离级别相关。(默认是:可重复读)
适合场景:MyISAM适合select比较多的场景。Innodb适合insert和update情况比较多的场景。MyISAM并发相对较低,不支持事务, Innodb并发相对要好一点,支持事务

为什么MyISAM会比Innodb 的查询速度快

InnoDB 在做SELECT的时候,要维护的东西比MYISAM引擎多很多;

1)InnoDB 要缓存数据和索引,MyISAM只缓存索引块,这中间还有换进换出的减少
2)Innodb寻址要映射到块,再到行,MyISAM记录的直接是文件的OFFSET,定位比INNODB要快
3)InnoDB 还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC ( Multi-Version Concurrency Control )多版本并发控制

MyISAM 索引是b+ tree, 数据和索引分开
Innodb也是用的是b+tree , 表数据文件本身就是按b+ tree组织的。


联系方式
WeChat: fe88655 e-mail:77368447@qq.com

标签: MySQL

作者头像
萧萧一风创始人

做一个积极主动热情的人,为了想要完成的事情和实现的目标,拼命投入力量。

上一篇:Docker命令
下一篇:网站(Nginx)配置 HTTPS 完整过程

发表评论

×
选择打赏方式:

打赏

打赏

打赏

×
选择分享方式: