0


【mysql】MyISAM和InnoDB的区别?

    MyISAM和InnoDB都是mysql的存储引擎。

    mysql5.5之前,默认的存储引擎是MyISAM,从5.5之后,默认的是InnoDB,下面我们来聊一聊这两种存储引擎有啥不一样的地方。

1. MyISAM和InnoDB的区别

1.1 数据的存储结构不同

每个MyISAM在磁盘上存储为三个文件,他们以表名开头来命名,.frm文件存储表结构定义。.MYD文件存储数据文件,.MYI存储索引文件。

而InnoDB在磁盘上存储为两个文件,它们也是以表名开头命名,.frm文件存储表结构定义,.ibd存储数据和索引。

由于MyISAM的数据和索引是分开存储的,所以查询的时候,MyISAM的叶子节点存储的是数据所在的地址,而不是直接存储数据。

而InnoDB的数据和索引存储在一个文件下面,叶子节点存储的就是整的数据。

1.2 存储空间的消耗不同

MyISAM可被压缩,存储空间较小。MyISAM支持三种不同的存储格式:静态表(默认) 动态表 压缩表。

而InnoDB需要更多的内存和存储,它会在主内存中建立缓冲池用于高速缓冲数据和索引。

1.3 对事务的支持不同

MyISAM注重的是性能,每次查询具有原子性,其执行速度比InnoDB更快,但不支持事务。

InnoDB支持事务/外部键等高级数据库功能。

1.4 对锁的支持不同

如果只是执行大量的查询,MyISAM是更好的选择。MyISAM在增删的时候,需要锁定整张表,效率会低。

而InnoDB支持行级锁,删除插入的时候只需要锁定操作行就可以了。如果有大量的增删改操作时,InnoDB的性能会更高。

1.5 对外键的支持不同

MyISAM不支持外键,而InnoDB支持外键。

2.如何选择存储引擎?

2.1 如果需要支持事务则选择InnoDB,不需要事务选择MyISAM

2.2 如果表的大部分操作都是查询,则选择MyISAM,有写又有读则选择InnoDB

2.3 如果系统奔溃导致数据难以恢复,且成本高,不要选择MyISAM

标签: mysql java 数据库

本文转载自: https://blog.csdn.net/weixin_40954799/article/details/140950714
版权归原作者 冬瓜排骨粉丝汤 所有, 如有侵权,请联系我们删除。

“【mysql】MyISAM和InnoDB的区别?”的评论:

还没有评论