《MySQL》基础篇:语句执行过程

MySQL执行语句流程

mysql查询流程

连接器

通过指令mysql -h 连接ip -u 登录用户名 -p和MySQL服务建立TCP连接

然后连接器会对用户和密码进行校验,核对成功后保存用户的权限,后续用户的操作都会基于连接开始时的权限(意味着这时权限被更改,不会影响这次连接的操作权限)

  1. 通过show processlist查看当前客户端和服务建立连接数。

img

  1. 对于空闲连接,超过默认值自动断开。
mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
  1. 查看最大连接数
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

查询缓存

连接器工作完成后,客户端就可以向MySQL服务发送SQL语句。

先解析第一个字段得出是什么类型的语句,如果是查询语句,就去查询缓存中查找数据,查询缓存以Key-Value形式保存在内存中。

Key为语句,Value为查询结果。

只要一个表有更新操作,那该表对应的查询缓存会清空。这样缓存的命中率太低,所以8.0版本废弃了查询缓存。

那8.0之前,也可以把query_cache_type 设置为DEMAND关闭缓存。

解析器解析SQL

进行词法分析和语法分析

执行SQL

分为三阶段

  • prepare 阶段,也就是预处理阶段;
  • optimize 阶段,也就是优化阶段;
  • execute 阶段,也就是执行阶段;
预处理器
  • 检查 SQL 查询语句中的表或者字段是否存在;
  • select * 中的 * 符号,扩展为表上的所有列;
优化器

主要负责将 SQL 查询语句的执行方案确定下来

执行器

和存储引擎进行交互,把查询条件给存储引擎,搜索出结果返回给执行器检验是否满足,满足则会发送给客户端(Server 层每从存储引擎读到一条记录就会发送给客户端,之所以客户端显示的时候是直接显示所有记录的,是因为客户端是等查询语句查询完成后,才会显示出所有的记录)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值