网站动画特效,高端品牌化妆品排行榜前十名,网站怎么做支付系统,西部域名网文章目录 第一步建立连接第二部解析 SQL第三步执行 sql预处理优化阶段执行阶段索引下推 执行一条select 语句中间会发生什么#xff1f; 这个是对 mysql 架构的深入理解。
select * from product where id 1;对于mysql的架构分层: mysql 架构分成了 Server 层和存储引擎层 这个是对 mysql 架构的深入理解。
select * from product where id 1;对于mysql的架构分层: mysql 架构分成了 Server 层和存储引擎层
Sever 层 负责建立连接、分析和执行 sql 语句。 一些核心功能模块比如解析器生成语法树预处理器、优化器、执行器这些。
在存储引擎层:支持 InnoDB 存储引擎。底层使用的是 B树。mysql5.5 之后 InnoDb 成为默认的存储引擎了。
第一步建立连接
通过连接器和 mysql 的客户端建立连接连接的过程需要使用 TCP 三次握手。
msyql -u root -p在输入对应的密码就登录成功了查看 mysql 当前有多少连接数量:
show processlist;执行了一次查询就算建立连接了连接默认是八个小时,超过这个数量就会自动的断开。 连接数太多了 删除了查询缓存在 mysql8 之前有缓存的内容。 第二部解析 SQL
解析器会做两件事情第一个是词法分析
mysql 会根据你输入的字符串识别出关键字出来比如 select username from userinfo 会解析出来 4 个 token,有两个 key word是 select 和 from。
第二个进行语法的分析
根据词法分析的结果语法解析器根据语法规则判断输入的 sql 是否满足 MYSQL 的语法。没有问题就构建出来 sql 语法树。
构成一个这样的语法树。 https://blog.csdn.net/zhang24360/article/details/128963299 语法树的详细内容
第三步执行 sql
分为三个阶段 预处理 优化阶段 执行阶段
预处理
预处理阶段
检查 sql 查询语句中的表或者字段是否存在。
将 select * 中的*符号扩展为表上的所有列。
优化阶段
优化阶段
需要确定一个执行计划比如现在有多个索引到底用哪一个索引。确定 sql 查询语句的执行方案。
想要知道选择哪个索引可以在查询语句之前加一个 explain 命令会展示书 sql 语句的查询计划。 查询主键索引 B树的成本会高于查询二级索引 B树的成本优化器会基于查询成本考虑选择代价最小的普通索引。
执行阶段
执行阶段
这个时候 server 层要去和存储引擎层进行交互了
比如有 全表扫描、主键索引查询、索引下推。
索引下推 索引下推是减少二级索引的回表查询操作提高查询的效率。将 Server 层做的一些事情交给了存储引擎层去做。
查询 age20 的时候遇到联合索引就会失效了这个时候就需要回表查询 reward 是否是等于 1000 的。
这样效率太慢了直接在存储引擎层去判断 reward 是否等于 1000. 如果成立在回表给 Server 层操作。