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

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查询设置 分析MySQL语句查询性能方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间语句,我们将超过指定时间SQL语句查询称为“查询”。...Mysql5.0以上版本可以支持将执行比较慢SQL语句记录下来。...> set long_query_time=1; 注: 我设置了1, 也就是执行时间超过1秒都算查询。...mysql查询日志对于跟踪有问题查询非常有用,可以分析出当前程序里有很耗费资源sql语句,那如何打开mysql查询日志记录呢?...Windows: 当你是第一次开启mysql查询,会在你指定目录下创建这个记录文件,本文就是mysqlslowquery.log,这个文件内容大致如下(第一次开启MYSQL查询情况下) E:

3.9K20

MySQL执行sql语句机制

目录 1 概念 2 执行过程 1 概念 连接器: 身份认证和权限相关(登录 MySQL 时候)。...查询缓存: 执行查询语句时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。...第二步,语法分析,主要就是判断你输入 sql 是否正确,是否符合 MySQL 语法。 优化器: 按照 MySQL 认为最优方案去执行执行器: 执行语句,然后从存储引擎返回数据。...2 执行过程 查询语句执行: 1、鉴权 2、查询缓存 3、分析sql,提取关键字select 、表名、列字段、查询条件,然后判断语法 4、优化执行方案,自己优化算法不一定是最优 5、再次权限校验...,然后调用数据库引擎,返回执行结果 更新(包括删除、新增)语句执行执行更新语句时会就日志:归档日志和重做日志, 1、先查询数据 2、然后将查出数据修改,调用引擎API接口写入这一行数据,InnoDB

3.8K30

Mysql中sql执行如此

我们经常发现,往往执行一条简单查询语句,但是很长时间都没有返回,今天我们看看是什么原因导致 第一类:查询长时间不能返回 执行下面语句 select * from t where id =1;...等待行锁 首先,我们看看下面sql语句 mysql> select * from t where id=1 lock in share mode; 要执行上面语句时候,这个记录就会要加读锁,如果这个时候已经有一个事物在这行记录上持有一个写锁...这个问题并并不难分析,问题是如何查出谁占着这个写锁,如果你用mysql5.7,可以使用下面语句 mysql> select * from t sys.innodb_lock_waits where...可以看到4号线程就是阻塞罪魁祸首,因此只要干掉他就可以了, 不过,这里不应该显示kill query 4,这个命令是指把正在执行语句停止,但是我们update语句已经执行完成了,这样是无法去掉...第二类:查询 我们执行下面语句 select * from t where c=50000 limit 1; 有字段c没有索引,这个语句只能全表扫描,因此要扫描5万行,再看看日志记录. ?

1.6K30

select语句执行流程(MySql

学习了极客时间MySql课程,做个总结 以一条select语句为例:select * from T where ID=4 ,梳理下执行流程 一条sql语句执行过程中需要经过连接器、分析器、优化器、...查询缓存 在经过连接器之后,会执行第二步查询缓存,在MySql拿到查询后,会先到查询缓存查看是否执行过这条语句,之前执行结果会以key-value对形式存在,如果不在查询缓存中,会继续执行后面的极端...在MySql8.0之后去掉了查询缓存功能。...分析器 分析器会先做“词法分析”,识别出sql里字符串分别是什么,读出“select”关键字对出这是一条查询语句,把字符串T识别成“表T” “语法分析”,根据词法分析结果,判断该条sql是否满足MySql...语法 优化器 优化器作用在于选择最优逻辑执行sql,例如在一个语句进行多表关联时候,决定各个表连接顺序 执行器 在开始执行前,先判断你对表T是否有执行查询权限,没有就返回没有权限错误,有权限则继续执行

7310

Mysql查询语句执行流程

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

4.2K10

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语句执行流程

此时,我们可以在命令行中输入 SQL 语句,并将其发送给 MySQL 服务器进行执行MySQL 服务器接收到 SQL 语句后,会执行相应操作,比如查询、插入、更新等。...MySQL 查询缓存工作原理如下: 当执行一个查询语句时,MySQL 会首先检查查询缓存,看看是否有与当前查询语句完全匹配缓存结果。...它根据查询语句结构和表统计信息,选择最佳查询执行策略和访问路径。 MySQL 优化器主要功能包括: 查询重写:MySQL 优化器会对查询语句进行重写,以便更好地利用索引、避免全表扫描等。...MySQL 优化器是一个智能查询执行计划生成器,它会根据查询语句和表信息,通过优化算法来选择最佳查询执行策略。...执行器 什么是 MySQL 执行MySQL 执行器(MySQL Executor)是 MySQL 数据库一个组件,负责执行查询语句并返回结果。

30730

POSTGRESQL AUTO_EXPLAIN 记录语句执行计划

在数据库执行SQL语句中,有很多语句执行中,执行计划会变化,而执行计划变化会导致SQL 语句执行时间变化,如何对在POSTGRESQL 中执行较慢语句。...auto_explain 模块提供一种自动记录语句执行计划功能,使用这个功能同时需要注意,任何功能开启都需要负担一定性能损耗,在损耗情况下,我们应该判断是否开启这个功能。...这个参数代表了决定了超过多长时间SQL 语句需要对执行计划进行记录,默认是-1 ,表名不记录任何语句。...主要原因是,功能不同,查看查询执行计划本身并不应该针对每一个查询,而是应该对应与一些较长时间执行SQL 如我们默认 1秒SQL 就要记录在查询记录中,但是我们不应该将查询执行计划也设置成一秒...,而应该讲时间拉长,例如 10秒,超过10秒语句我们才需要查看他实际执行计划,如果将每个超过1秒语句都记录查询分析的话,浪费日志空间,和消耗系统IO等资源会比较大。

60020

MySQL十八:写语句执行过程

一、读语句执行过程 在之前《MySQL运行机制》文中,详细说明了一个查询语句执行过程,查询sql执行过程基本上分为六步: 「建立连接(Connectors&Connection Pool)」 「...二、写语句执行过程 2.1写语句是怎么执行 前面说到,更新操作时,也会走先查询,所以它执行流程也是大同小异。...「优化器」 确定索引,执行计划 「执行器」 内存中修改数据,调用存储引擎修改接口,最终修改数据 「以上就是更新语句执行过程,看起来似乎跟查询语句没啥区别,只不过一个查询语句,一个是更新语句...2.5 写入语句执行过程 通过对以下几篇文章介绍,可以使我们对MySQL写入有了一个大概认识,内部执行原理也有了比较清晰认知,接下来看一下一条sql在执行整个流程中,从它经历组件,各个组件做操作等角度来分析一下写操作执行过程...「后台线程会定时将Buffer Pool中修改过缓存页加载到磁盘中」 通过以上执行过程分析图,写入操作就完成了,由此可见,虽然我们就写了一句update语句,但是实际上mysql还是帮助我们做了很多工作

2.4K20

MySqlsql语句执行过程详述

前言: 很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句执行过程是怎样,如果不了解执行过程的话,就很难进行sql语句优化处理,也很难设计出来优良数据库表结构。...这篇文章主要是讲解一下sql语句执行过程。 sql语句执行过程: 客户端、连接器、分析器、优化器、执行器、存储引擎几个阶段。 连接器作用:管理链接、权限验证处理。...在项目中经常会遇到一种情况就是数据库长连接,很长时间不关闭操作,这个时候会导致内存占用太大,被系统杀掉导致Mysql异常。...查询缓存: 连接建立完毕之后,进行查询缓存处理,执行sql语句会先到缓存中看看是不是刚刚执行了这条语句,之前执行语句及其结果就会以key-value对形式直接存储在内存中,key是查询语句,...然后进行语法分析处理,根据词法分析,根据词法分析结果,语句分析器就会根据语法规则判断输入这个sql语句是否满足mysql语法。

22540
领券