优秀的编程知识分享平台

网站首页 > 技术文章 正文

一条SQL查询语句是如何执行的?MySql杂谈

nanyue 2024-11-19 07:53:17 技术文章 4 ℃

在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

如下所示,一条普通的查询语句,你看到的是无数的用户列表信息展示出来

select * from t_user


当你点击执行这条查询指令时,你知道发生了什么吗 ???

1 第一步 建立连接

第一步,你的客户端会先连接到这个数据库上,这时候对接的就是连接器,连接器负责跟客户端建立连接、获取权限、维持和管理连接。

然后连接器根据你提供的用户名与密码信息进行校验而创建连接

2 第二步 经典查询缓存

连接建立完成后,第二步就是查询缓存。

当mysql拿到这个查询后,会先到查询缓存检查查看之前是不是执行过这条语句,如果执行过,那么会将查询语句及其结果以 key-value 对的形式缓存在内存中(key 是查询的 语句,value 是查询的结果),查询到,就直接反回结果给客户端

之所以称之为经典查询缓存,是因为MySQL 8.0 版本直接将查询缓存的整块功能删掉了,查询缓存往往弊大于利,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。

3 第三步 分析器 分析语法

分析器先会做“词法分析”,分析关键字 如 select 、update这一类的,然后将其他字符串识别成表中的列

然后再做语法分析,结合词法的结果来进行 语法分析, 检查输入的SQL 语句是否满足 MySQL 语法

如果语法不对,就会收到“You have an error in your SQL syntax”的错误提醒,一般语法错误会提示第一个出现错误的位置,检查紧接“use near”的内容部分解决就好。

4 第四步 优化器

分析器校验SQL语法后,MySql就知道输入的SQL将要做什么,接下来就是进一步的优化,具体操作如当查询表里面有多个索引的时候,优化器决定使用哪个索引;或者在一个语句有多表关联 (join)的时候,决定各个表的连接顺序。

5 第五步 执行器

执行器是用来操作数据存储引擎的,分析器分析SQL的目标,优化器决定执行的方案,执行器负责执行职责。

最近发表
标签列表