mysql语句解析_mysql 语句的查询过程解析
select * from tb where ID = 1
下面解析的查询过程都是基于上面的简单查询,该系列的所有素材都来自于丁奇的mysql的45讲
1、建立连接
a、客户端发出请求,请求首先到达连接器,然后连接器去校验用户名和密码,如果校验通过,则去权限表读取该用户的权限,并且之后该连接的所有操作都是基于该次权限的读取。
b、如果你在这次连接建立之后,再用管理员账号去修改该用户的账号权限,也不会对该次连接的后续操作生效,除非再次建立个新的连接;一个连接建立之后如果没有后续操作,则该连接处于空闲状态;如果长时间没有动静,则连接器会自动断开该次连接,这个时间由参数指定(wait_timeout),默认是8个小时。
2、查询缓存
a、连接建立之后就开始查询缓存:mysql收到一个请求之后会先去查询缓存,看看这条语句是否被执行过,之前执行过的语句和结果会以键值对的形式存在缓存中,如果在缓存中查到了该语句,则会将结果直接返回给客户端。如果没有查询到,则会继续执行后面的流程,同时会将查询的结果放到缓存中;需要注意的是查询缓存失效非常频繁,只要有对表的更新,那么这个表中所有的缓存都会被清空,是否需要查询缓存,mysql都有参数设置,按需设值,在后续8.0的版本中,查询缓存的功能将会被删除掉。
3、分析器
a、这一步是该条查询语句没有命中缓存的时候才到这里,首先分析器会对你的sql语句做词法分析,然后再做语法分析。词法分析:mysql需要把sql语句识别出来,哪个字符串代表什么,select会被识别为查询,tb会被识别为表,字符串ID会被识别为列ID;做完这些分析之后,再去做语法分析:根据词法分析的结果,语法分析会根据语法分析的结果判断sql是不是满足MYSQL语法规则,如果不满足,则会抛出一个错误。
4、优化器
a、一条sql经过分析器之后,mysql就知道他要干嘛了,这时候并不是把sql拿去执行,这中间还有一个优化器,这个优化器是在该表有多个索引或者多表关联的时间决定用哪个索引或者决定哪条子查询先执行,总体来说就是选择效率最高的一种方案来执行。
5、执行器
a、在经过了分析器和优化器之后,sql才能到达执行器被真正执行。在开始执行的时候,首先会判断该次连接的对象对该表是否有操作权限。如果没有则返回权限不足的错误,如果有权限就继续打开表执行,在打开表的时候,执行器会根据表的引擎定义去使用这个引擎提供的接口。
b、以上面的查询语句为例,假设该表没有索引,执行器的具体流程是:调用InnoDB引擎接口取这个表的第一行,并判断该ID的值是不是等于1,如果不是则跳过,如果是则将这行存到结果集中并且继续去取下一行数据,判断逻辑相同,知道取到该表的最后一行,最后执行器将上面所有满足条件的行组成记录集作为结果集返回给客户端。至此,一条sql的执行流程就走完了。
mysql语句解析_mysql 语句的查询过程解析相关推荐
- mysql select表达式_MySQL数据库SELECT查询表达式解析
数据的管理在很大一部分是在进行查找工作,而SELECT占据了很大的一部分 SELECT select_expr [,select_expr...] [ FROM table_reference WHE ...
- java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询过程解析...
这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elas ...
- mysql or优化_MySQL 语句优化
官方文档放这里,有什么代码先到官方文档查询: MySQL 8.0 Reference Manual :: 8 Optimizationdev.mysql.com 优化涉及多个级别的配置,调整和测量性 ...
- mysql 排版 指令_Mysql语句排版
SQL 高效排版指北 统一 SQL 排版的相关用法,极大提高编写和维护 SQL 的效率. 注: column = 选取的字段:table = 选取的表名 语句结构 错误 SELECT column1 ...
- mysql数据库的注释语句是_MySQL 语句注释方式简介
MySQL支持三种注释方式: 1.从'#'字符从行尾. 2.从'-- '序列到行尾.请注意'-- '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格.tab.换行符等等). 3.从/ ...
- mysql语句大全_MySQL语句大全
一.连接mysql. 格式: mysql -h主机地址 -u用户名 -p用户密码 二.修改密码. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码a ...
- mysql复数记录_mysql 数据库设计查询规范
(一)建表规约 1.[强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否) .说明:任何字段如果为非负数,必须是unsigned. ...
- mysql course表_MySQL多表查询初探
今天是我时隔五年再次动起键盘写文章,距离我上一次写文章,初中作文......所以我的文章并没有雕章琢句,更不会惊天地泣鬼神,只要大家能学到知识,我就很开心了.呀丫丫......又开始罗嗦一大堆没用的了 ...
- mysql sql测试_MySQL语句测试——数据查询
MySQL语句测试--数据查询 3.4 数据查询 一.单表查询 /*1.选择表中的若干列,各个列的先后顺序和语句中列名从左到右的顺序一致 select 目标表达式 from 表名; */ /*(1)s ...
最新文章
- 依赖注入与Unity
- 802.11 Power Save(节电/省电/节能)机制总结
- 移动端怎么设计适合的表单?
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
- map 长度_Python实用教程系列——高阶函数Map、Filter、Reduce
- 自定义控件 - 流式布局:TagFlowLayout
- 【白话机器学习】算法理论+实战之LightGBM算法
- Flash,EEPROM区别
- 文本分类模型_多标签文本分类、情感倾向分析、文本实体抽取模型如何定制?...
- 知识付费网站php源码,原创在线教育知识付费类源码只要50元
- 8月20日全球六大国际域名解析量变化情况统计报告
- 经济师计算机考试取消,2019年经济师考试计算机机考答题要求及说明
- CENTOS7+LNMP+zabbix3.2.6安装配置
- Matlab多光谱kmeans聚类分割
- 和opengl的关系_从零开始的图形学学习(零):一切的开始 —— 自建OpenGL开发框架...
- Unity3D水下动物模型大集合
- 悉尼大学计算机相关专业硕士,悉尼大学计算机硕士课程详细介绍
- linux xv命令什么意思,Linux部分命令解释(命令缩写代表什么意思)
- 【程序员如何买基金 六】买卖指数基金的合适时机
- 服务器上挂网站怎么挂,网站怎样上挂到云服务器