mysql-Innodb引擎和myisam引擎区别?

272 阅读2分钟

“这是我参与更文挑战的第6天,活动详情查看: 更文挑战

前边我们讲了很多与事务相关的,那么事务有什么产生的呢?我们知道MYSQL架构分为三层,其中有一次是引擎层,那么每种引擎都有事务吗?换一句话说每种引擎都会产生redoLog和undoLog吗? 答案肯定不是的。我们就那两个比较常见的是引擎作为比较Innodb和myisam。

引擎有:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

Innodb引擎和myisam引擎区别? 1》存储 Innodb 索引和数据一块存储 .frm 数据库表结构 .ibd 存放该表的数据和索引的⽂文件。 myisam 索引和数据分开存储 .frm 数据库表结构 .myd⽂文件表数据⽂文件 .myi⽂文件索引⽂文件 2》事务 Innodb 有事务,myisam 无事务 3》锁的级别 myisam只有表锁而Innodb支持的粒度可以到行级别锁。

以下都是innodb引擎存储。 事物是用存储引擎层实现的。 MySQL中默认采⽤用的是⾃自动提交(autocommit)模式 在⾃自动提交模式下,如果没有start transaction显式地开始一个事务, 那么每个sql语句句都会被当做一个事务执⾏行行提交操作。 在MySQL中,存在一些特殊的命令,如果在事务中执⾏了这些命令, 会⻢上强制执行commit提交事务; 如DDL语句句(create table/drop table/alter/table)、lock tables语句句等等。 不过常⽤用的select、insert、update和delete命令,都不会强制提交事务。

image.png

myisam难道就没有什么使用场景了吗? 答案是有的。

myisam引擎没有事务那么插入数据和查询数据性能更好,其次占用的空间会更小。

随着MYSQL对innodb引擎的优化其实性能已经提升了很多

image.png

image.png

PU核数的增加,InnoDB的吞吐量反而越好,而MyISAM,其吞吐量几乎没有什么变化,显然,MyISAM的表锁定机制降低了读和写的吞吐量。

更详细对比文档如下: dimitrik.free.fr/blog/archiv…