MYSQL--一条SQL执行的流程,分析MYSQL的架构

打印 上一主题 下一主题

主题 896|帖子 896|积分 2688

执行一条select 语句中心会发生什么? 这个是对 mysql 架构的深入明确。
  1. select * from product where id = 1;
复制代码
对于mysql的架构分层:

mysql 架构分成了 Server 层和存储引擎层:
Sever 层 负责建立连接、分析和执行 sql 语句。 一些核心功能模块比如剖析器天生语法树,预处置惩罚器、优化器、执行器这些。
在存储引擎层:支持 InnoDB 存储引擎。底层使用的是 B+树。mysql5.5 之后 InnoDb 成为默认的存储引擎了。
第一步建立连接

通过连接器和 mysql 的客户端建立连接,连接的过程需要使用 TCP 三次握手。
  1. msyql -u root -p
  2. 在输入对应的密码就登录成功了
复制代码
查看 mysql 当前有多少连接数量:
  1. 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 层做的一些事变交给了存储引擎层去做。
查询 age>20 的时候遇到>联合索引就会失效了,这个时候就需要回表查询 reward 是否是即是 1000 的。
这样服从太慢了,直接在存储引擎层去判断 reward 是否即是 1000. 如果成立在回表给 Server 层操作。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表