MYSQL---执行流程

通过本文,我们将了解到以下几个问题。

一、思考

问题一:一条SQL语句在MYSQL中是如何执行的?

问题二:MYSQL是如何做到同时处理多个请求的?

二、分析

备注:本文主要参考《极客时间:MySql实战45讲》

  • MySQL执行流程图

  • 各模块作用

1.连接器

  • 客户端连接MySql服务器命令

mysql -h(IP地址)  -P(端口号) -u(用户名)-p 

  • 连接器的作用

1.负责与客户端建立TCP连接。

2.连接建立之后,验证用户名密码。

3.查询权限表,验证权限(当连接建立之后,即使使用管理员账号修改了此账号密码,依然不影响此连接内的操作,除非重新再次建立连接)。

  • 空闲连接

建立连接之后,如果没有后续操作,则该连接处于空闲状态。通过SHOW PROCESSLIST命令可以查看空闲连接(Command:Sleep):

如果客户端太长时间没有动作,则连接器将会断开此连接。可通过以下命令查看默认等待时间(8小时):

  • 短连接

每次执行完很少几次查询就断开连接,下次查询重新建立一个连接。建立连接的过程比较复杂,建议使用长连接。

  • 长连接

如果客户端持续请求,则一直使用同一个连接。当使用大量长连接时会使MYSQL内存增长特别快。可以通过定期断开长连接或者msyql_reset_connection命令重新创建连接。

2.查询缓存 

  • 缓存存储形式

key:SQL语句  value:结果,如果缓存命中返回,否则执行后续流程。

  • 缓存参数

1.通过参数“query_chae_type”,控制是否开启缓存

2.在SQL语句中控制是否使用缓存

SELECT SQL_CACHE * FROM   t  WHERE id='1';

对于经常动态更新的表查询缓存的效率会变的非常低,而对于不需要变动的静态表可以使用缓存。

在MYSQL8.0之后已经彻底移除缓存,如果需要缓存可以使用Redis。

 3.分析器

  • 词法分析

提取Mysql关键词,判断是增删查改的哪一种。

  • 语法分析

判断SQL语句是否符合Mysql语法规则。

4.优化器

 优化器作用:

1.当表中有多个索引时,选择使用哪一个索引。

2.多表关联查询时,决定各个表的连接顺序。

5.执行器

 1.判断对表T是否有执行权限。

2.如果有权限,打开表。根据表的存储引擎定义去调用对应存储引擎的接口。

 三、回答开篇

问题一:一条SQL语句在MYSQL中是如何执行的?

通过上文分析,我们已经了解到了MYSQL的基本执行流程,并分析了各个部分的作用。

问题二:MYSQL是如何做到同时处理多个请求的?

MYSQL连接管理器是多线程处理模式,每一个连接请求过来会创建一个线程进行处理。当然可以通过参数设置线程缓存数量(默认为0),这样一个新的请求会判断线程缓存中是否有可用线程,这样可以避免大量的线程创建和销毁带来的开销。具体请看:https://zhuanlan.zhihu.com/p/43941022

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值