MYSQL的存储引擎为什么大部分情况下都用innodb不用myisam

一 什么是MYSQL

想要知道这个问题,首先要知道什么是mysql,mysql数据库是一种关系数据库。其稳定性在目前的企业开发中得到验证,而且由于它是开源的,所以支持企业在使用中对其源码进行自己的修改,当然,这种修改需要许可。

二 存储引擎

其次,存储引擎的概念也要弄清楚。要知道,存储引擎是mysql才有的概念,其他数据库管理系统是不具有这个概念的。
拿什么是存储引擎呢?
我们在将数据存到数据库中时,是以一张张表的形式去存储的,不同的存储引擎实际上就是决定了我们存储时使用的结构以及读取时的方式,但如果我们光看表,是看不出存储引擎的区别的。
说到这里或许还是不太好理解,引用一个比较好的例子,就如同我们保存视频时,有各种不同的保存格式,例如avi,mp4等等,我们打开这些视频或许看到的是一样的内容,但是很明显这两段视频的存取方式是不一样的。

三 MYISAM

作为在5.5之前的默认引擎,MYISAM也有着优秀的性能。而且还有大量的特性,比如全文索引、压缩、空间函数,但是不支持事务和行级锁。在我的理解来看,每次读取数据都直接锁住整个表,因此在高并发中自然性能较低。另外,MYISAM不支持事务也无法进行奔溃恢复,不支持外键。
它更适合读写频繁的业务,其全文搜索的能力略强,但不能简单认为它的效果一定优于innodb

四 INNODB

INNODB是当前版本myql的默认引擎,支持事务以及四种隔离级别(RU,RC,RR,S),并且支持ACID(原子性,一致性,隔离性,持久性),并且支持MVCC,在并发时MVCC的效果比加锁效果更好。同时,它支持行级锁,锁粒度更小,也支持外键。

五 总结对比

  • 是否支持行级锁:myisam只支持表级锁,innodb支持表记锁和行级锁,默认情况下是行级锁。
  • 是否支持事务和崩溃恢复:MYISAM强调性能,每次操作具有原子性,性能略优于innodb,但不支持事务。innodb支持事务,外键等高级数据库功能。innodb是具有事务,回滚,奔溃恢复能力的事务安全型表。
  • 是否支持外键:MYISAM不支持外键,但是INNODB支持外键
  • 是否支持mvcc:仅INNODB支持。在高并发下,MVCC效果比单纯加锁好。MVCC仅在RC和RR隔离级别下工作,可以使用乐观锁和悲观锁的形式实现。

六 业务场景

当前MYSQL的默认搜索引擎是INNODB,但是实际上MYISAM也没有完全被抛弃,具体该选用哪个引擎应该看具体的业务场景。
如果是需要高并发高扩展的业务,我们选择INNODB更合适,因为大部分业务都需要考虑这些,因此INNODB成为主流引擎
但有时我们并不需要高并发高扩展,也不需要事务支持和崩溃恢复,那我们自然可以选择MYISAM,毕竟他的读写性能在一定条件下是优于INNODB的

猜你喜欢

转载自blog.csdn.net/weixin_44062399/article/details/123736045