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

时间:2019-10-10 22:35来源:互联网点击:手机版

导读:

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


锁粒度

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


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

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




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



索引

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


事务

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


其他

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


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

总结

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


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


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

提示:360电脑网发布程序员冷知识,Mysql的数据库引擎为什么多选InnoDB?这篇文章已经注明原创作者和创作平台,如若转载,请注明出处,文章链接:[http://www.360diannao.com/biancheng/jishu/332006.html]。不尊重原创的行为将受到我们的谴责,电脑网提倡读者朋友们一起来良性监督。

最新文章

作者介绍

————————————

作者:沙茶敏碎碎念


介绍:自媒体编程技术领域专家


相关分类

360电脑网(www.360diannao.com)是专业的电脑、手机、电子书、游戏、漫画、科技等IT门户网站

Copyright@2015-2019 | | 备案号:豫ICP备16006929号-10 | TAG标签

声明: 网站所有文章均来自互联网,如有不良信息或者侵犯您的版权,应及时向本站客服证明及详细侵权情况证明,共同打造一个干净良好的上网环境。