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个的时候就会使数据库危险了

          3、Innodb索引特点:(1)最左原则(2)二级索引要回表(3)支持索引扫描

          4、Innodb的索引:聚簇,唯一索引,普通索引,前缀索引

          5、唯一索引和普通索引的区别:只有普通索引能用出change buffer ;

                                                              普通索引适合于频繁写入,但不常读取。

          6、不走索引的情况:函数,!=,<>,is null,不符合最左原则时,where id+1 = 6。where语句中出现like ‘T%'的语句可以                    走索引。

          7、Explain:type=ref(索引等职查询)range(索引范围查询)all(全盘扫描)       查看走不走索引

          8、char(20)就为20字节;varchar(20)他为22字节,var变长位还要占了2字节;datetime为8;date为3

          9、Order by后面加索引,注意select后面出现的值要在索引中出现

          10、Temporary buffer (临时空间):用到他的为group by(分组后自动排序的时候用),union,distinct(去重)(distinct                 (属性))。当此空间不够大时候,会借助磁盘。 

          11、Sync_binlog,innodb_flush        他俩的值设为1时候,就是最安全的(每一次提交刷新一次);设为0时候,是性能最高                     的,但是可能丢数据(每一秒刷新一次)

          12、版同步可以防止主从同步数据丢失

         

 

 

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

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

 

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL的存储引擎是插件式的,其中最常用的两个存储引擎是MyISAM和InnoDB。MyISAM是MySQL中默认的存储引擎,它没有太多人关注的原因可能是因为它在一些方面的性能和功能上相对较弱。然而,决定使用哪个存储引擎是一个复杂的问题,而我们可以聚焦于MyISAM和InnoDB这两个最常见的存储引擎。 在这两个存储引擎中,InnoDB要求表必须有主键,因为它的数据文件本身按照主键聚集。而MyISAM可以没有主键。这是InnoDB与MyISAM之间的一个重要区别。 因此,当选择MySQL的存储引擎时,我们需要考虑不同存储引擎的特性和适用场景,以便根据需求选择最合适的存储引擎。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [浅谈MySQL存储引擎](https://blog.csdn.net/hanfeng529264/article/details/123352215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析](https://download.csdn.net/download/weixin_38655484/12834006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值