Mysql的数据读取浅谈

   日期:2020-09-09     浏览:85    评论:0    
核心提示:mysql的数据是存在磁盘上的,数据读取过于缓慢同样的查询,第一条查询,会把从磁盘中查出来的数据缓冲到数据库的内存中,等在一个同样的查询来到时候就直接访问内存(内存读比磁盘读要快的多)...

                                                   MySQL体系结构

数据库永远分为俩层去看:CPU+内存,硬盘

 

用户请求过来后,会先通过Commander Dispatcher找到Query Cache Module(缓冲)进行查看
Query Cache Module

       同样的查询,第一条查询,会把从磁盘中查出来的数据缓冲到数据库的内存中,等在一个同样的查询来到时候就直接访问内存(内存读比磁盘读要快的多)

       磁盘io(意为磁盘数据输入输出)   当使用update语句时候,如果只修改一条语句,也会触发mysql的一种机制,让他去在查询一次磁盘,这样更加消耗性能,所以一些公司关掉了此缓冲功能。

注意:mysql8.0以后这个功能被干掉了

当Query Cache Module没有查到时候,他会找到Parser

从此开始也是SQL的语句执行步骤

Parser(解析)

    Parser,又称解析,去知道在哪里能找到对应的表,从而取到相应的数据

解析---》执行计划

核心层(mysqld)(基于CPU和内存):解析sql语句,生成合理的执行计划,然后取数据‘

存储引擎层:

                     存储引擎InnoDB(MySQL5.5之后默认的引擎为InnoDB),是按照主键索引来放置的数据,所以每个主键索引                  都是一条数据,当找到主键索引后,无需再去进行数据定位即可获取到对应的数据。(注:如果创建一个InnoDB类                  型的表,他没有主键,它自动就会用第一个非空且唯一的列,会建立隐藏列(6字节),以隐藏列为主键)

                     存储引擎MyISAM,典型的堆表,存一条数据就放进去,再来一条就在塞进去,是按照数据存储顺序存放的。                    获取数据时候,比如通过索引找到对应的id后再通过id到表里进行数据定位,比InnoDB要麻烦一步。但是他的辅助索                引更好一些,因为他是直接通过辅助索引就可以查到对应的数据,但是InnoDB得由主键再去进行主键索引查询才能                  获取到数据。

                     至于走那个引擎,需要判断后进行选择,之后进行后续的sql语句执行流程。

SQL语句的执行流程(图画分析)

 

MySQL内部解析

       查询出来的数据会先从磁盘(emp)拿出来放于MySQL内部的innodb buffer pool内存里,之后后续相同的查询会直接从pool里面进行查找,这样会使速度更快避免一直访问磁盘。放于内存后,它会去用户私密的区域soft buffer去进行排序(有order才在这里排序),之后进行数据获取。

       log buffer(日志先行),不管什么操作都会先在日志进行记录之后才会有真正的操作。此举是为了防止数据库宕机而设置的,日志会进行“落盘”,而“落盘”是通过readdo日志把logbuffer的日志刷到磁盘中的。

 

 

注意:

          1、MySQL是一个单进程多线程的服务器,进而处理高并发

          2、idle类型(会话)的线程mysql多少都可以承受,active类型的线程(会话)当达到125个的时候就会使数据库危险了

 

个性签名:一个人在年轻的时候浪费自己的才华与天赋是一件非常可惜的事情

        如果觉得这篇文章对你有小小的帮助的话,记得在左下角点个“”哦,博主在此感谢!

 

万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾! 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服