网上医疗和医院网站建设制作,福利窝又一个wordpress,家具网站开发环境与工具,wordpress追加表引言#xff1a;MySQL执行一条sql语句期间发生了什么#xff1f;
想要搞清楚这个问题#xff0c;我们必须了解MySQL的体系结构和工作流程
一、MySQL体系结构 MySQL由以下几个部分组成
一、server层
1.MySQL Connnectors连接器#xff0c;MySQL的连接池组件#xff0c;…引言MySQL执行一条sql语句期间发生了什么
想要搞清楚这个问题我们必须了解MySQL的体系结构和工作流程
一、MySQL体系结构 MySQL由以下几个部分组成
一、server层
1.MySQL Connnectors连接器MySQL的连接池组件网络连接使用io多路复用select处理
主线程处理连接请求select
子线程对应一条连接处理该连接的sql请求
也就是说MySQL为每一条客户端连接创建一个线程来专门处理该连接的sql请求因此mysql的sql处理是多线程的所以mysql默认最大连接数为151过多的线程会占用大量内存
2.查询缓存
对于用户发送的sql查询请求select会先在缓存中查找这个缓存是以keysql命令-value结果的方式存储的如果找到则直接返回对应的结果value没找到则进行下一步
在mysql8.0版本弃用了查询缓存原因是在实际统计的使用数据中查询缓存的命中率很低
命中率低的原因是只要一个表有更新修改操作这个表的查询缓存会被清空所以每一次的查询缓存都是在该表的最新查询缓存中查找的而不是所有缓存。因此表更新则清空缓存的策略是安全且必要的但是同时使得查询缓存的命中率很低
3.解析器
查询缓存未命中或mysql8.0后的版本对于一个sql请求mysql的server层要做的是进行词法语法分析检查该sql语句是否符合协议sql语句正确后生成语法树
4.预处理器
1.检查sql语句中指定的表和字段是否存在
2.将 * 替换为表中所有的列名
5.优化器
对于经过预处理的sql语句优化器负责生成执行计划执行sql的具体步骤一般来说优化器会生成多个执行计划并选择出一个最优的计划交由执行器执行
二、存储引擎mysql使用innodb
6.执行器
执行器和存储引擎进行交互
一条sql语句的执行流程
1.连接器建立连接、管理连接、校验用户身份
2.查询缓存mysql 8.0版本前sql语句命中缓存则直接返回结果未命中则继续执行
3.解析sql进行词法关键字句法语法分析生成语法树
4.执行sql
预处理检查表和字段是否存在优化生成执行计划并选择决定最优计划执行执行器使用存储引擎提供的api与之交互
行sql
预处理检查表和字段是否存在优化生成执行计划并选择决定最优计划执行执行器使用存储引擎提供的api与之交互
推荐学习 https://xxetb.xetslk.com/s/p5Ibb