当前位置:网站首页>mysql一个select语句的执行过程
mysql一个select语句的执行过程
2022-07-26 22:46:00 【Meme_xp】

上面是mysql的架构图
一共分为Server 层,和存储引擎层两成
第一步,连接器
你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。
连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。
长连接与短连接问题
客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。
如果八小时后再请求就会要求重连,但是连接过程通常比较复杂,所以尽量使用长连接,但是长连接也会产生问题。
全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。
如何解决
1.定期断开长连接,要使用了再连接
2.mysql5.7以及以上版本,可以在进行较大操作后。通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。
第2步,查询缓存
会先去查缓存,执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。如果不在缓存中就下一步。
但是大多数不会查询缓存,因为利大于弊
查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。
mysql 8.0版本以上查询缓存功能直接被删掉了
第3步,分析器
如果没有命中查询缓存,就要开始真正执行语句了。
按照以下顺序:
1.MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。
2.判断sql语句是否满足mysql语法
第四步,优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
第五步,执行器
开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
对于有索引的表,执行的逻辑也差不多。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。
边栏推荐
猜你喜欢

How does MySQL get the first three items in each group

【CANN训练营】走进媒体数据处理(下)

Machine learning exercise 6 - Support Vector Machines

负载均衡的运用

项目 | 实现一个高并发内存池

ERROR! MySQL is not running, but PID file exists

MySQL installation

Share 29 chrome plug-ins, and there is always one for you

Use of shell (11) brackets

小项目——开机自连校园网
随机推荐
使用ECS和OSS搭建个人网盘
Mysql数据库-面试题
Linux部署MYSQL
SSH and NFS services
Proxmox ve installation and initialization
MySQL single table query exercise
【无标题】
作业1-4学习笔记
散户股票开户哪个证券公司好,哪个更安全
It's the first time to write your own program in C language. If you have a boss, you can help a little
Vector容器的底层实现
FTP service
mysql视图
34iptables firewall
22FTP
Shell programming specifications and variables
ceph(分布式存储)
Shell script - backup, update and rollback of files
Project | implement a high concurrency memory pool
(hdu1588) Gauss Fibonacci (sum of matrix fast power + bisection matrix proportional sequence)