Mysql Innodb和Myisam引擎区别

2020年05月03日 · Linux · 技术帮助分享 · 66次阅读
------正---文------

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组织的。

原文地址:

https://www.clarkhu.net/?p=128


------结---束------

『静谧星河』采用《署名-相同方式共享 4.0 国际》进行许可。如需转载请保留本文地址。
本文地址:
https://www.yuvin.cn/Linux/332.html

支持我

教程帮助解决方法LinuxCentos

静谧星河最后编辑于1个月前


因本站不提供交互式服务,评论均需审核后显示,敬请谅解。

添加新评论

captcha

请输入验证码