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
版权归原作者 冬瓜排骨粉丝汤 所有, 如有侵权,请联系我们删除。