mysql为什么选innodb_程序员冷知识,Mysql的数据库引擎为什么多选InnoDB?

这是一道经典的程序员面试题,Mysql数据库在超大并发下,特别是Insert语句比较多的情况下,应该选择哪种存储引擎,很多人会说MyISAM,今天我们来简单介绍下Mysql的MyISAM存储引擎。

锁粒度

首先我们来了解 一些MyISAM与InnoDB的一些区别,首先是锁粒度,MyISAM只有表锁而InnoDB拥有行锁。也就是说,Mysql的InnoDB的锁粒度更小,锁粒度小,有时候是好事有时候也是坏事,假如我们只是修改几行的数据,那么锁粒度小显然会更优,如果涉及的行数比较多的时候,行锁会造成更大的内存消耗,速度也会更慢一些。

b8b9ac9d826137fc5c0c8aad8c8b8977.png

那么有一个问题,如果是表粒度锁,如何保证请求不会被饿死。饿死是一个计算机的名词,指的是某个请求一直得不到执行,例如有一个写操作,同时又有很多个查询操作,由于查询操作比较慢,锁一直得不到释放,所以被饿死了。在Mysql的MyISAM引擎中,会优先处理写请求,防止请求被饿死。

8723736d76b5a08436add0216a02b4d8.png

索引

Mysql的MyISAM是非聚集索引,原始文件跟索引文件是分开存储,每次查询都要先查询索引文件,再查询原始数据。而InnoDB是聚集索引,数据文件跟索引存在一起,如果通过主键查询,可以直接索引到数据文件。

事务

Mysql的MyISAM是不支持事务,对于每一条语句都会单条提交,而InnoDB的一个强大之处在于可以支持事务。

其他

Mysql的MyISAM还比较难以恢复,当发生故障的时候,数据恢复起来比较麻烦。但是,MyISAM引擎也并非一无是处,如果我们的业务场景都是增加跟查询的时候,MyISAM会变得非常快,这个时候,MyISAM每次插入都是追加写文件,但是如果出现删除的时候,文件就会出现空洞,这个时候会优先写空洞,造成速度又慢下来。

739e687911e2bbf8a64ffb5d8513b258.png

总结

Mysql在5.5版本之后,就用InnoDB替换MyISAM成为Mysql的默认存储引擎,这并不是没有道理的。虽然MyISAM在个别场景下,速度会优于InnoDB,但是InnoDB更加灵活,并且一旦崩溃的时候,InnoDB恢复会更加方便,所以更加推荐使用InnoDB。

回到我们最初的面试题,虽然在这些情况下,MyISAM会稍微有点优势,但是,架构师与程序员考虑问题不能只考虑性能,考虑到可用性与扩展性,InnoDB似乎是一种更优的选择。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

(此处已添加圈子卡片,请到今日头条客户端查看)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值