储存引擎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

相关推荐

双飞二本嵌入式求拷打我是在 BOSS 上投递的简历,好多都没人回复,这是开场白和简历求大神帮忙看看。您好!我是2025届应届生,最快可在一周内上岗,能够实习六个月以上,并接受加班。以下是我的核心优势和相关经验:1. 嵌入式开发能力:   熟练掌握STM32系列单片机及其外设(如GPIO、定时器、ADC、DAC、I2C、SPI、UART等),能够独立完成硬件驱动开发和调试。  熟悉FreeRTOS实时操作系统,具备多任务调度和资源管理经验。  熟悉LVGL图形库开发,能够实现嵌入式设备的图形界面设计。2. 硬件设计能力:   具备PCB设计经验,曾为2023年工创赛物流搬运赛道设计小车主板,带领团队获得国家级银奖。   熟悉硬件原理图分析,能够快速理解并调试硬件电路。3. 机器人开发与竞赛经验:   在全国大学生智能车竞赛、ROS机器人竞赛中多次获得国家级奖项,具备丰富的机器人开发经验。   熟悉Linux环境,对ROS和ROS 2有一定了解,能够进行机器人系统的开发与调试。4. 编程能力:   熟悉C/C++,熟悉Python,能够高效完成嵌入式开发和算法实现。   具备良好的代码规范和文档编写能力。5. 团队协作与领导能力:   在多个项目中担任核心开发或团队负责人,具备良好的沟通能力和团队协作精神。   在工创赛中带领团队完成项目规划、任务分配和技术攻关,展现了较强的领导力。我对嵌入式开发、机器人技术和智能硬件充满热情,期待加入贵公司,与团队共同成长,为公司创造价值!如果有合适的岗位,欢迎随时联系我,期待进一步沟通!
沉淀一会:嵌入式就是狗屎
点赞 评论 收藏
分享
01-16 18:34
四川大学 Java
欢迎加入AI:没有啥稳定不稳定,一切都源于业务快速发展还是收缩。我当年一开始去的央企,业务不赚钱,也贼卷,慢慢就开始优化了。。。
点赞 评论 收藏
分享
评论
13
56
分享

创作者周榜

更多
牛客网
牛客企业服务