一条查询sql的执行流程和底层原理
1、一条查询SQL执行流程图

2、查询SQL执行流程之发送SQL请求
(1)客户端按照Mysql通信协议将SQL发送到服务端,SQL到达服务端后,服务端会单起一个线程执行SQL。
(2)执行时Mysql首先判断SQL的前6个字符是否为select。并且语句中是否带有SQL_NO_CACHE关键字,如果没有则进入查询缓存。
3、查询SQL执行流程之查询缓存
查询缓存说白了就是一个哈希表,将执行过的语句及其结果以键值对的格式缓存到内存中。其中key是一个哈希值,由查询SQL、当前要查询的数据库、客户端协议版本等生成的,value就是查询结果。如果要绕过查询缓存,可以在SQL中加SQL_NO_CACHE字段,如:
SELECT SQL_NO_CACHE * FROM table
注:Mysql8.0版本开始取消查询缓存
4、查询SQL执行流程之解析器
解析器执行流程分为两个阶段,词法解析和语法解析
(1)首先对SQL词法进行分析,将SQL从左到右一个字符、一个字符地输入,然后根据构词规则识别单词。将会生成4个Token,如下所示:

(2)然后对SQL语法进行解析,判断客户端传入的SQL语句是否满足Mysql语法。此时会生成一颗语法树,如下所示:

如果语法不对,将会收到如下提示
You have an error in your SQL syntax
如果解析器顺利生成语法树,就会将SQL送发到预处理器
5、查询SQL执行流程之预处理器
预处理器主要做两件事情,查看SQL中列名是否正确和权限验证
(1)首先判断SQL语句中的列名是否存在于数据表中,再看看表名是否正确,如果不对,将返回如下错误提示
Unknown column xxx in ‘where clause’
(2)预处理器对SQL进行权限验证,判断SQL是否有操作这个表的权限,若没有,则会返回如下错误信息
ERROR (): SELECT command denied to user 'root'@'localhost' for table 'xxx'
一切验证通过后将语法树传递给优化器
6、查询SQL执行流程之优化器
优化器的任务就是对SQL语句进行优化,达到最快的执行效果,优化器对SQL优化完成后会将SQL变成一个执行计划交给执行器
7、查询SQL执行流程之执行器
执行器就是根据执行计划来进行执行查询, 根据SQL的指令,逐条调用底层存储引擎,逐步执行。
MySQL定义了一系列抽象存储引擎API,以支持插件式存储引擎架构。Mysql实现了一个抽象接口层,叫做 handler(sql/handler.h),其中定义了接口函数,比如:ha_open, ha_index_end, ha_create等等,存储引擎需要实现这些接口才能被系统使用。
一条查询sql的执行流程和底层原理的更多相关文章
- 面试官:说说一条查询sql的执行流程和底层原理?
一条查询SQL执行流程图如下 序章 自我介绍 我是一条sql,就是一条长长的字符串,不要问我长什么样,因为我比较傲娇. 额~~不是我不说啊,因为细说起来,我可以细分为DML(Update.Insert ...
- MySql 学习之 一条查询sql的执行过程
相信大家都接触过Mysql数据库,而且也肯定都会写sql.我不知道大家有没有这样的感受,反正我是有过这样的想法.就是当我把一条sql语句写完了,并且执行完得到想要的结果.这时我就在想为什么我写这样的一 ...
- MySql 学习之 一条更新sql的执行过程
上一篇文章咱们说了一条查询sql的执行过程.如果没有看过上一篇文章的可以去看下上一篇文章,今天咱们说说一条更新sql的执行过程. 上面一条sql是将id为1的分数加上10. 那么它的执行流程是怎样的呢 ...
- 一条查询SQl是怎样执行的
MySQL的逻辑架构图 大体来说,MySQL可以分为Server层和存储引擎层两部分. Server层包括连接器.查询缓存.分析器,优化器等,涵盖MySQL的大多核心服务功能,以及所有的内置函数,存储 ...
- MySql基础架构以及SQL语句执行流程
01. mysql基础架构 SQL语句是如何执行的 学习一下mysql的基础架构,从一条sql语句是如何执行的来学习. 一般我们写一条查询语句类似下面这样: select user,password ...
- 3、myql的逻辑架构和sql的执行流程
msyql逻辑架构 逻辑架构的解析 逻辑架构图如下(序号代表的是:服务器处理客户端请求的流程) 1.1connectors connectors是指使用不同语言的客户端与mysql server服务器 ...
- 一条查询SQL查询语句的执行原理
先熟悉一下浅而易懂SQL执行的流程图SQL查询过程七步曲 1.查询SQL发送请求 客户端将查询sql按照mysql通信协议传输到服务端.服务端接受到请求后,服务端单起一个线程执行sql 2.判断是否为 ...
- sql的执行流程
mysql中的SQL语句执行是有一定顺序的,如下:1. from2. on3. join4. where5. group by6. with7. having8. select9. distinct1 ...
- 在MySQL中使用explain查询SQL的执行计划
1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MyS ...
随机推荐
- Node 框架接入 ELK 实践总结
本文由云+社区发表 作者:J2X 我们都有过上机器查日志的经历,当集群数量增多的时候,这种原始的操作带来的低效率不仅给我们定位现网问题带来极大的挑战,同时,我们也无法对我们服务框架的各项指标进行有效的 ...
- 通过XDocument方式把List写入Xml文件
List<Person> list=new List<Person>{ new Person(){Name="张三",Age=50,Address=&quo ...
- Microsoft Edge浏览器下载文件乱码修复方法(二)
之前有写过"Microsoft Edge浏览器下载文件乱码修复方法",发现很多情况下下载文件乱码问题还是存在,这里对之前内容做简单补充,希望可以帮到大家. 方法二: 默认如果提示下 ...
- 关于windows系统无法更新的解决方法
操作系统无法更新解决方案! 1.检查网络连接是否正常: 2.检查控制面板设置,windows更新是否开启: 3.检查计算机-管理-服务和应用程序-服务组件里的windows update是否开启: 4 ...
- hdfs一直处于safemode模式
目前来看,导致hdfs一直处于safemode模式最直接的原因是已成功复制的块的比例没有达到默认值,块的损坏也会造成一直处于安全模式. 1)文件系统中有损坏的文件,使用fsck命令来查看 hadoop ...
- Nginx反向代理解决iframe跨域问题
前言 这几天有个需求:做个表单页面,要求后台人员能自定义发布表单,用户来填写表单.我一想,这不麦克表单有现成的吗,拿来就用!发布表单后,可以选择使用iframe方式嵌入网站,一切顺利. 当时的网站是h ...
- navicat导入.sql文件
用Navicat for Mysql导入.sql文件 虽然这算不上什么难事,但是对于新手来说(比如说我),Navicat for MySQL里的导出连接.运行SQL文件.导入向导.还原备份.这些功 ...
- [.net core] 在 Windows 中运行出现 WinHttpException: The parameter is incorrect
有一个 web 服务一直跑在 docker 中,今天需要在 Windows 上部署一个备份版本,于是,签出源代码,编译,运行.结果抛出 500 ,日志中有如下记录: System.Net.Http.H ...
- Java的Random类详解
Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子(以当前时间作为种子),另一个构造器需要程序员显示传入一个long型整数的种子. Random类比Math类的rando ...
- Python 爬虫——抖音App视频抓包
APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...