首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql查询语句执行流程

官方图 ---- ? 自行画图 ---- ? 第一步:   连接器 首先我们要连接上这个数据库,连接器负责建立连接,判断认证是否通过等。...第二部:   查询缓存 mysql拿到请求后首先判断请求查询语句是否有缓存,是否命中缓存,但是不推荐使用mysql缓存,官方也不推荐,因为只要有一条数据更新表缓存就会被删除,降低效率 第三步:   ...分析器 没有命中缓存的话就要开始执行语句了,首先对sql语句进行解析, 首先做 “词法解析”,分析出sql语句关键词等字符串代表什么含义,然后通过”语法分析“判断这个sql是否满足语法标准。...第四步:   优化器 优化sql执行速度,比如执行索引、表连接(join)执行顺序,然后决定出最快执行方案 第五步:   执行器 判断用户对这个表是否有权限,有的话就会根据这个表引擎执行通过优化器给出最优执行方案去执行

4.3K10

mysql查询语句执行顺序

Mysql SQL查询处理顺序: (8)select (9)distinct (1)from (3) join <right_table...from,最后执行是limit,每个操作都会产生一个虚拟表,做为下一步输入,这个虚拟表对用户是透明,只有最后一个虚拟表才会返回给用户 (1)from 对和执行笛卡尔积,产生虚拟表VT1 (2)on 对VT1应用on条件过滤,把符合记录放入VT2 (3)join 如果指定了join类型,如 left join、right...join,把相应外部行添加到VT2,形成VT3 如果from中有两个以上表,使用VT3和下一个表再执行一遍前3步,直到处理完所有的表 (4)where 对VT3应用where过滤,把符合<where_condition...对VT8进行去重操作,产生VT9 (10)order by 根据对VT9进行排序,产生VT10 (11)limit 取出指定行记录,产生VT11,返回给用户

5.1K50
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL查询语句执行顺序详解

以下是MySQL查询语句各个子句实际执行顺序: FROM 子句 JOIN 子句 WHERE 子句 GROUP BY 子句 HAVING 子句 SELECT 子句 DISTINCT 子句 ORDER BY...FROM 子句 执行顺序第一步是确定数据来源。MySQL从指定表中读取数据。这是查询基础,其他所有操作都基于此数据集。 sql 复制代码 FROM table1 2....GROUP BY 子句 如果查询语句中包含GROUP BY子句,MySQL会对过滤后数据进行分组。分组操作通常与聚合函数(如COUNT、SUM、AVG等)结合使用。...总结 理解MySQL查询语句执行顺序有助于编写更高效查询。通过合理安排各个子句,我们可以更好地控制查询行为和性能。...希望这篇文章能帮助你更好地理解MySQL查询执行过程,提高SQL查询优化能力。

6200

MySQL逻辑查询语句执行顺序

在这些SQL语句执行过程中,都会产生一个虚拟表,用来保存SQL语句执行结果(这是重点),我现在就来跟踪这个虚拟表变化,得到最终查询结果过程,来分析整个SQL逻辑查询执行顺序和过程。...执行FROM语句 第一步,执行FROM语句。我们首先需要知道最开始从哪个表开始,这就是FROM告诉我们。...由于我测试SQL语句中并没有使用DISTINCT,所以,在该查询中,这一步不会生成一个虚拟表。...执行ORDER BY子句 对虚拟表中内容按照指定列进行排序,然后返回一个新虚拟表,我们执行测试SQL语句ORDER BY total_orders DESC,就会得到以下内容: +------...MySQL数据库LIMIT支持如下形式选择: LIMIT n, m 表示从第n条记录开始选择m条记录。而很多开发人员喜欢使用该语句来解决分页问题。

3.8K20

MySQL基础架构之查询语句执行流程

这篇笔记主要记录MySQL基础架构,一条查询语句是如何执行。...比如,在我们从student表中查询一个id=2信息 select * from student where id=2; 在解释这条语句执行流程之前,我们看看MySQL基础架构。...执行语句时候,mysql首先是去查询缓存,之前有没有执行过这样语句mysql会将之前执行语句和结果以key-value形式存储起来(当然有一定存储和实效时间)。...,接下来是专门用一个优化器进行语句优化,优化器任务是发现执行SQL查询最佳方案。...大多数查询优化器,包括MySQL查询优化器,总或多或少地在所有可能查询评估方案中搜索最佳方案。 优化器主要是选择一个最佳执行方案,执行方案是为了减少开销,提高执行效率。

1.1K10

MySQL架构(一)SQL 查询语句是如何执行

在了解 MySQL 架构之前,我们先看几个 SQL 语句,当我们知道了 SQL 语句执行流程,再学习 MySQL 架构简直手到擒来。...在 MySQL5.7版本,连接后会查询缓存,即查询语句是否执行过。 具体流程为 MySQL 在接收到查询请求后,先去查询缓存,看之前是否已经执行过该条查询语句。...若是该查询语句不在查询缓存中,就会执行后面的阶段。待执行完成后,查询结果会被存入查询缓存中。 我们可以看到,若是查询语句在缓存中,就不需要执行后续复杂操作,可以高效率获取查询结果。...执行器 到了执行器这一步,开始执行查询语句,在执行之前还需要判断下登录用户是否具有查询这个表权限,若是没有权限则返回权限限制错误提示 ERROR 1142 (42000): SELECT command...当 MySQL 将结果集返回给客户端,查询语句就已经执行完了。 补充 权限检查:分析器语法分析过程会做权限预检查(precheck),包括检查用户对数据库、表权限。

10010

PHP获取MySQL执行sql语句查询时间方法

如下所示: //计时开始 runtime(); //执行查询 mysql_query($sql); //计时结束. echo runtime(1); //计时函数 function runtime($...: 1,确定sql书写是否合理,高效 2,检查字段、表设计是否合理 方法1:在系统底层对sql操作类进行改写,通常类结构是 业务model ---》 db类 ---》 执行sql 可以根据情况在某阶段进行改写...rn"); }   //code... } 引用: phpmyadmin中代码,获得query执行时间如下: // garvin: Measure query time. // TODO-Item...这个更适合统计多条sql执行情况。 我见过好像是一个博客,访问页面之后会有一个提示大概说共查询了几次数据库,用了多长时间查询数据,那么开启mysqlprofile就可以轻松实现了。...执行sql语句查询时间方法就是小编分享给大家全部内容了,希望能给大家一个参考,也希望大家多多支持。

5.3K00

MySQL 简单查询语句执行过程分析(二)查询准备阶段

本文是 MySQL 简单查询语句执行过程分析 6 篇中第 2 篇,第 1 篇请看这里: MySQL 简单查询语句执行过程分析(一)词法分析 & 语法分析 这一篇主要讲内容是一条简单查询语句,在查询准备阶段会干哪些事情...正是因为打开表过程复杂,而代码复杂意味着执行效率下降,这对于 MySQL 来说是不能接受,所以必定要有优化手段。...2. select * 替换为表字段 我们在写 select 语句过程中,经常会用到星号(*),表示查询表中所有字段,但是表中并没有一个星号字段用来表示所有字段,所以在查询准备阶段,会把星号替换为表中所有字段...只有像 where 数据库名.表名.字段名 > 49276 这样,字段前面带有限定数据库名和表名时,找到一个字段之后,才能立马结束查找过程,而不用遍历整个查询语句中使用到所有表。...以上,就是本文全部内容了,今天文章有点长,感谢大家花时间阅读,如果觉得有用,还请帮忙转发朋友圈,让更多的人看到,大家一起进步,谢谢 ^_^ 预告一下,下一篇要写内容是 MySQL 简单查询语句执行过程分析

1K20

MySQL查询语句

查询emp中所有表:   select * from emp;  在日常工作中 不建议使用* 因为查询效率较低 常用命令:   select database(); 查看当前使用是哪个数据库   \...exit 命令,退出mysql。   ...查看创建表语句:   show create table emp;   查询语法格式:     select 字段名1,字段名2,字段名3,.... from 表名;   注意:标准sql语句中要求字符串使用单引号括起来...虽然mysql支持双引号,尽量别用。   可以给字段名设为中文:     select ename,sal * 12 as '年薪' from emp; 条件查询。   ...from       表名     where         条件; 执行顺序:先from,然后where,最后select 查询工资等于5000员工姓名?

15110

MySQL 简单查询语句执行过程分析(四)WHERE 条件

本文是 MySQL 简单查询语句执行过程分析 6 篇中第 4 篇,第 1 ~ 3 篇请看这里: MySQL 简单查询语句执行过程分析(一)词法分析 & 语法分析 MySQL 简单查询语句执行过程分析(...二)查询准备阶段 MySQL 简单查询语句执行过程分析(三)从 InnoDB 读数据 今天我们分为 3 个部分来介绍,首先会看一下 where 条件在源码中结构是什么样,对 where 条件结构有了初步了解之后...MySQL 中多层 where 条件会形成一棵树状结构,每多一个层级,都需要额外逻辑处理,执行效率上会有一点影响,所以在语法分析阶段,就会对 where 条件树状结构层级进行简化,可以合并层级就合并...Item_func_eq 条件(e1 = '成都' )中有一个属性 func,是用来比较存储引擎返回 e1 字段值是否等于成都,func 属性在我们讲第二篇(查询准备阶段)时提到过,func 属性值就是在查询准备阶段确定...,还请帮忙转发朋友圈,让更多的人看到,大家一起进步,谢谢 ^_^ 预告一下,下一篇要写内容是 MySQL 简单查询语句执行过程分析(五)发送数据,敬请关注!

2.4K30

MySQL语句执行顺序

MySQL语句一共分为11步,如下图所标注那样,最先执行总是 FROM操作,最后执行是LIMIT操作。...其中每一个操作都会产生一张虚拟表,这个虚拟表作为一个处理输入,只是这些虚拟表对用户来说是透明 ,但是只有最后一个虚拟表才会被作为结果返回。...如果没有在语句中指定某一个子句,那么将会跳过相应步骤。 ? 下面我们来具体分析一下查询处理每一个阶段 FORM: 对FROM左边表和右边表计算笛卡尔积。...,那么就会对上一个join连接产生结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为 止。...SELECT: 执行select操作,选择指定列,插入到虚拟表VT8中。 DISTINCT: 对VT8中记录进行去重。产生虚拟表VT9.

6.4K100

Mysql语句执行过程

当你希望MySQL能够以更高性能运行查询时,最好办法是弄清楚MySQL是如何优化和执行查询。...《高性能MySQL》 衡量查询开销三个指标 响应时间扫描行数 服务时间(处理这条语句真正花时间) 排队时间(等待资源,例如IO,行锁等) 扫描行数 返回行数 当删除了搜索条件列索引时,语句进行全表扫描...查询优化处理(解析SQL、预处理、优化SQL执行计划),将SQL转化成一个执行计划。 解析和预处理:生成一棵解析树(《编译原理》知识),MySQL按照其语法对解析树进行验证和解析查询。...优化过程书上介绍了很多情况,请参考书籍6.43章 执行计划 MySQL会生成一个指令树,然后通过存储引擎完成这棵树并返回结果 如图2 查询执行引擎  查询执行引擎则根据执行计划来完成整个查询。...在执行计划时,存储引擎通过调用实现接口来完成。 ?  图三 四个表表连接查询执行计划指令树 3.返回结果 如果查询可以被缓存,MySQL将结果存放到查询缓存里。

2.6K20

MySql基础架构(sql查询语句MySql内部具体是怎么执行?)

提出问题: 对于一个做后台不久我,起初做项目只是实现了功能,所谓增删改查,和基本查询索引建立。直到有一个面试官问我一个问题,一条sql查询语句mysql数据库中具体是怎么执行?...于是开始了深入学习mysql。本篇文章通过 一条sql查询语句mysql数据库中具体是怎么执行? 来具体讲解mysql基础架构。...讲解 mysql> select * from Student where ID=1; 上面一条简单查询语句很简单,但我想好多开发者并不知道在MYSQL内部执行过程。...Mysql确定了查询语句,会先到查询缓存中,看之前是否执行过这条查询语句。之前如果执行过这条查询语句查询结果可能会以key-value方式直接缓存在内存中。...分析器 如果在查询缓存中未找到缓存数据,就会开始真正执行查询语句Mysql需要直到这条查询语句要做什么?因此需要对SQL语句做解析。

5.5K20

MySQL语句执行分析

为了验证问题是否出在sql语句,所以用以下方法来分析: 查询SQL执行记录 explain 分析 MySQL 语句执行时间 下面会分别介绍三个方法开启方法。...在指定路径查看SQL记录 explain 分析 大部分性能分析都需要使用到该命令,可以用来查看SQL语句执行效果,可以帮助选择更好地索引和优化语句。...key_len显示MySQL决定使用键长度。如果键是NULL,则长度为NULL。ref显示使用哪个列或常数与key一起从表中选择行。rows显示MySQL认为它执行查询时必须检查行数。...MySQL 语句执行时间 show profile 以及show profiles语句可以显示当前会话过程中执行SQL语句性能信息。...已经是开启状态 执行sql语句后进行分析 执行完后,输入 show profiles;复制代码 即可查看所有的sql执行时间 ?

1.6K40

MySQL实战 -- 一条SQL查询语句是如何执行

比如,你有个最简单表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql> select * from T where ID=10; 我们看到只是输入一条语句,返回一个结果,却不知道这条语句在...MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行语句及其结果可能会以 key-value 对形式,被直接缓存在内存中。...key 是查询语句,value 是查询结果。如果你查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。 如果语句不在查询缓存中,就会继续后面的执行阶段。...分析器 如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什么,因此需要对 SQL 语句做解析。 分析器先会做“词法分析”。...小结 今天我给你介绍了 MySQL 逻辑架构,希望你对一个 SQL 语句完整执行流程各个阶段有了一个初步印象。由于篇幅限制,我只是用一个查询例子将各个环节过了一遍。

1.5K30

Mysql查询语句优化

分析查询 想要对一条查询语句进行优化,首先要对其进行分析,MySQL提供了这个机制, 可以通过explain sql 或者desc sql语法去获取MySQL对某一条语句执行计划(MySQL优化之后...查询优化 对一条sql优化可以分为两部分,第一部分是对语句优化,比如将子查询改写为join等,第二部分是与索引相关优化,在这一阶段可能会修改语句以让查询尽可能命中索引,甚至会通过修改索引来达到这个目的...查询语句优化 检查语句 查询语句优化第一步,首先从大层面上分析一下语句,得到以下问题答案: 是否请求了不需要数据?...重构语句 拆分复杂查询 当一个语句太过于复杂时候,我们总是难以掌握它性能,因此我们可以将一个复杂查询拆分成多个查询,然后在应用程序中进行关联....使用hint优化查询 MySQL提供了一些用于我们”提示”MySQL服务器应该怎样进行这个查询,需要注意是,使用hint很有可能不会给你程序带来性能上提升,反而可能是性能下降,因此在使用前请确保自己了解该

5.2K20

MySQL 执行语句分析

先分析下查询语句语句如下: select * from tb_student A where A.age = '18' and A.name = '张三'; 结合上面的说明,我们分析下这个语句执行流程...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,则返回;如果没有...通过分析器进行词法分析,提取 sql 语句关键元素,比如提取上面这个语句查询 select,提取需要查询表名为 tb_student,需要查询所有的列,查询条件是这个表 id='1'。...更新语句 sql 语句如下: update tb_student A set A.age = '19' where A.name = '张三'; 这条语句也基本上会沿着上一个查询流程走,只不过执行更新时候肯定要先记录日志...原文链接:一条SQL语句MySQL中如何执行

2.5K10

MySQL 查询语句大全

MySQL 查询语句大全 当然,以下是博客导语、摘要和总结部分。 导语 大家好,我是猫头虎博主!欢迎来到这篇关于 MySQL 查询语句全面指南。...摘要 本文将深入浅出地介绍 MySQL 各种查询语句,从基础 SELECT 语句开始,到复杂 JOIN 操作,再到高级查询和存储过程。...文章还将包括排序、筛选、分组和聚合等方面的内容,帮助你全面了解和掌握 MySQL 查询。 简介 MySQL 是一个开源关系数据库管理系统,它支持各种查询语句和操作,用于数据操纵和检索。...SELECT column1, COUNT(*) FROM table_name GROUP BY column1; 子查询查询允许你在一个查询执行另一个查询。...各种查询语句进行了全面的探讨。

15910

MYSQL基础查询语句

SELECT 语句基础选择全部列SELECT *FROM departments; -- 表名选择特定列SELECT department_id, location_id -- 列名,属性FROM departments...对,就是在 SELECT 查询结果中增加一列固定常数列。这列取值是我们指定,而不是从数据表中动态取出。你可能会问为什么我们还要对常数进行查询呢?...SQL 中 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定常数列,但如果我们想整合不同数据源,用常数列作为这个表标记,就需要查询常数。...空字符串长度是 0,而空值长度是空。在 MySQL 中,空值是占用空间。表结构查询使用 DESCRIBE 或 DESC 命令表示表结构。...条件查询使用 WHERE 子句过滤不满足条件行。

14810
领券