MySQL存储引擎MyISAM和InnoDB的区别

·  阅读 752

你都工作3年了,怎么还不知道MyISAM和InnoDB有什么区别?一位粉丝被面试官这样一个问题。当时,这位粉丝直接回复“不知道”,这位粉丝自己也怪不好意思的。

其实,面试官问他这个问题也不是随便问的,也是看了这位粉丝简历上写了熟练MySQL才提问的。其实,对于MySQL,这位粉丝可能只是非常熟练地完成建库、建表、往数据库表中读写数据这些简单的操作而已,并没有去了解建表的原理。

这个面试题也给我们敲了一下警钟,对于有些技术的知识点,要是没有掌握到一定深度,建议不要写熟练之类的,如果真要写,建议用了解或者熟悉这样的字眼来描述,避免面试官问起时又答不出来,暴露了自己的不足。

另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以关注我的煮叶介绍。

MyISAM和InnoDB到底有什么区别呢?

1、MyISAM和InnoDB的区别

MySQL 5.5以后的版本开始将InnoDB作为默认的存储引擎,之前的版本都是MyISAM。关于MyISAM和InnoDB的区别,我总结为以下5个方面,希望能帮助到大家。

1). 数据的存储结构不同

  先来看MyISAM,每个MyISAM在磁盘上存储成三个文件,它们以表的名字开头来命名。.frm文件存储表定义。.MYD(MYD)存储数据文件。.MYI(MYIndex)存储索引文件。

 而 InnoDB在磁盘上保存为两个文件。.frm文件同样存储为表结构文件,.ibd文件存储的是数据和索引文件。

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

而InnoDB叶子节点存储的是整个数据行所有的数据。

2). 存储空间的消耗不同

  

     MyISAM可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。

     InnoDB需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。InnoDB所在的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

3). 对事务的支持不同

MyISAM强调的是性能,每次查询具有原子性,其执行速度比Innodb类型更快,但是不提供事务支持。

InnoDB除了提供事务支持和外部键等高级数据库功能。还具有事务提交(commit)、回滚(rollback)和崩溃修复能力(crach recovery capabilities)等这些事务安全(transaction-safe ACID compliant)型表。

4). 对锁的支持不同

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

而innoDB支持行级锁,删除插入的时候只需要锁定操作行就行。如果有大量的插入、修改删除操作,使用InnoDB性能能会更高。

 

5). 对外键的支持不同

MyISAM不支持外键,而InoDB支持外键。当然,各种不同MySQL版本对两者的支持都有所改进

2、总结及建议

最后总结一下,MyISAM和InnoDB的主要区别包括

1). 数据的存储结构不同

2). 存储空间的消耗不同

3). 对事务的支持不同

4). 对锁的支持不同

5). 对外键的支持不同

MyISAM和InnoDB的区别还有很多,我这里只是列举了比较重要的几点。那我们在实际开发中,该如何选择MyISAM和InnoDB呢?我总结为以下三点:

1、如果需要支持事务,选择InnoDB,不需要事务则选择MyISAM。

2、如果大部分表操作都是查询,选择MyISAM,有写又有读选InnoDB。

3、如果系统崩溃导致数据难以恢复,且成本高,不要选择MyISAM。

以上就是我对MyISAM和InnoDB区别的总结和理解,下次面试你会了吗?

本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。 关注微信公众号『 Tom弹架构 』回复“666”可获取200页的PDF面试文档!

我是被编程耽误的文艺Tom

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改