储存引擎MyISAM与InnoDB

为什么要知道储存引擎MyISAM与InnoDB

追根溯源

作为一个励志成为后端程序员的男人(我是要成为海贼王的男人),怎么可能不会数据库呢,毕竟以后还要经常的CURD呢不是,但我们是有理想有抱负的青年,怎么能只接触表面呢,我们不仅要明白他怎么CURD,更要明白他们的储存原理,只有这样我们才能在以后的工作中面对不同的需求。


先说说MySQL数据库的逻辑结构

我们学java基本上就只是去使用数据,但我们很少去了解数据库的逻辑结构,很少去了解整个数据库是如何实现CURD的过程的,所以今天你们就赚到了。


图片很清晰的解释了各个部分,我就调最重要的几个地方说一下
查询缓存:查询缓存是当数据库接收到一个查询请求,也就是select,会先查看缓存中是否有这条select的记录,有会快速返回结果集,没有就添加,然后将select语句提交给分析器,缓存中会以key-value方式储存查询记录,key就是select语句,value就是查询结构,每个表都有自己的缓存,一旦表的数据有更新,缓存就会清空。
分析器:分析器会分析你的sql语句,然后提交给优化器
优化器:会给据提交来的结果选择合适的索引,或者当你sql语句中有join时候决定表的顺序
储存引擎:都确定好就会来到储存引擎中处理数据,不同的储存引擎适合不同的使用场景,
储存引擎也有很多,这次就说俩个最典型的MyISAM与InnoDB。

MyISAM储存引擎

MyISAM是mysql5.1版本之前的默认储存引擎,他有几个特点
1.锁级别为表级锁
MyISAM的表锁有两种方式,一种是读共享锁,另一种是写独占锁(其实是表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)但是我不喜欢这个读法,哈哈哈哈),读共享锁是指当一个请求读取一个表时,也允许其他请求读取这个表;而写独占锁的就是指当一个请求是修改一个表时,阻塞其他请求读取和修改这个表。
2.不支持事务和全文索引
MyISAM储存引擎是不支持事务的高速储存和检索的数据库储存引擎,所以MyISAM适合用于查询频繁的场景。
3.索引为非聚簇索引
这里先解释一下什么叫聚簇索引和非聚簇索引,省的你们出去查了
聚簇索引:索引所采用的树结构的叶子节点储存的数据
非聚簇索引:索引所采用的树结构的叶子节点储存的不是数据,而是数据的地址

MyISAM储存引擎的索引为非聚簇索引,主索引树和辅助树叶子节点储存的都是数据的地址,所以主索引和辅助索引本质上没有什么区别,数据表存在独立的地方。


InnoDB储存引擎

InnoDB储存引擎是mysql在1.5版本后更改的默认版本,既然更改了,就必然有优于MyISAM的方面,一起看看吧
1.锁级别为行级锁
InnoDB储存引擎的锁最高级别为行级锁,并不是说InnoDB就舍弃了表级锁,InnoDB的行级锁是通过给索引项加锁来实现行级锁的,所以当不同过索引时,InnoDB还是启用的表级锁,行级锁的获取锁和释放锁的过程都会占用很多的资源,所以InnoDB不适合查询过于频繁的场所。
2.支持事务和外键,5.6.4版本之后支持全文索引(FullText)
InnoDB储存引擎的设计是为了适应高并发的场景,所以InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务,同时支持外键。
3.索引为聚簇性索引
InnoDB在索引上进行了很大的优化,将数据直接放在了主索引叶子上,这样主索引便可以直接找到对应的数据,当调用辅助索引的时候会产生回表操作,辅助索引树的叶子节点储存的是主键,所以会再次会到主索引上再次查找,最终获取到数据。


总结小结

MyISAM储存引擎
1.表级锁
2.不支持事务和全文索引
3.索引为非聚簇性索引
适合查询比较频繁的场景,插入,更改比较少,无需事务的场景

InnoDB储存引擎
1.同时使用表级锁和行级锁
2.支持事务和外键
3.索引为聚簇索引,会有回表操作
适合并发性较高,更改表比较频繁的,安全要求较高的场景

最后给你们推荐一本书吧



#MySQL#
全部评论
1 回复 分享
发布于 2020-12-03 21:38
感谢参与牛客创作者计划!欢迎更多牛友来写干货,瓜分5000元奖励~~技术场活动链接:https://www.nowcoder.com/link/czztlqjs
点赞 回复 分享
发布于 2020-12-04 10:58

相关推荐

Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
13
56
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务