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

Posted 我的大前端生涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一条SQL查询语句是如何执行的? MySql杂谈相关的知识,希望对你有一定的参考价值。


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

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

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的目标,优化器决定执行的方案,执行器负责执行职责。



以上是关于一条SQL查询语句是如何执行的? MySql杂谈的主要内容,如果未能解决你的问题,请参考以下文章

MySQL45讲-2-一条SQL更新语句是如何执行的?

从头开始搞懂 MySQL(01)如何执行一条 SQL 查询语句

从头开始搞懂 MySQL(01)如何执行一条 SQL 查询语句

输入的查询SQL语句,是如何执行的?

一条查询SQL是如何执行的

01基础架构,一条SQL查询语句是如何执行的?