{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

一条SQL语句在MySQL中是如何执行的?

shusenshusen 回答0 收藏1
收藏问题

5条回答

lifefriend_007

lifefriend_007

回答于2022-06-28 13:48

1、客户端发送一条查询给服务器;然后客户端能做的就只是等待服务端的结果。

2、服务端收到查询后先检查查询缓存,如果刚好命中了缓存那么OK直接从缓存里拿出结果给客户端。如果没有那么就进入下一阶段。

3、服务器段解析SQL语句并进行一定的预处理,然后在优化器生成对应的执行计划(优化器的功能是找出最佳的执行计划);如果在这个过程中遇到任何错误都可能停止此次查询。

4、mysql根据优化器生成的最佳执行计划,通过存储引擎的API来执行查询,返回查询结果。

5、mysql将结果返回给客户端。

实际上mysql执行的每一步都比较复杂,此处仅就流程简要描述。


评论0 赞同0
  •  加载中...
entner

entner

回答于2022-06-28 13:48

MySQL执行SQL的流程大概这样子的:

1. 连接器,这个步骤是和客户端建立连接

2. 分析器,解析SQL语句,这一步如果SQL语句写的不对就会报错了

3. 优化器,这个步骤主要是选择索引的,MySQL会选择认为最优的索引,实际上可能不是最优的

4. 执行器,这个步骤主要是根据表的定义,调用具体的存储引擎执行SQL,现在默认引擎是innodb。还有就是记录binlog日志。

这里省略了查询缓存的步骤,这个步骤在连接器之后,不过一般都是关闭缓存的。

评论0 赞同0
  •  加载中...
233jl

233jl

回答于2022-06-28 13:48

一张图说明你的问题。

谢谢!


评论0 赞同0
  •  加载中...
Juven

Juven

回答于2022-06-28 13:48

作为一个刚入坑不久的码农,我也想知道,如何才能快速学习数据库。

评论0 赞同0
  •  加载中...
qianfeng

qianfeng

回答于2022-06-28 13:48

词法分析->优化->表引擎,根据引擎需要中间可能还有一些回调,大体逻辑就是这样

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<