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

MySQL 查询执行过程

当希望 MySQL 能够以高性能方式运行查询时,最好办法就是弄清楚 MySQL 是如何优化和执行查询MySQL 执行一个查询过程,如下: ?...【3】MySQL 最优可能和我们想最优不一样:我们希望执行时间尽可能短,但是MySQL 只是基于其成本模型选择最优执行计划,有时候并不是最快执行方式。...所以,我们根据执行成本选择执行计划并不是完美的模型。 【4】MySQL 从不考虑其他并发执行查询:可能会影响到当前查询速度。...六、查询执行引擎 ---- 在解析和优化阶段,MySQL 将生成查询对应执行计划,MySQL 查询执行引擎则根据这个执行计划来完成整个查询。这里执行计划是一个数据结构,而不是字节码。...MySQL 根据执行计划给出指令逐步执行。在根据执行计划逐步执行过程中,有大量操作需要通过调用存储引擎实现接口来完成,这些接口也就是我们称为 “handler API” 接口。

2.2K30

MySQL查询执行过程

mySQL查询执行过程 01 查询流程图 当我们希望MySQL能够以更高性能进行查询时,弄清楚MySQL中是如何优化和执行查询就显得很有必要,这里,先搬出来一张图镇楼: ?...这张图写清楚了一个查询在MySQL执行过程: 1、客户端发送一条查询给服务器。 2、服务器先检查查询缓存,如果命中了缓存,则会进行权限校验,权限校验通过,直接返回结果。...3、如果没有命中缓存,则进行SQL解析、预处理、再由优化器进行查询优化,计算各项查询方法成本、生成对应执行计划。 4、MySQL根据执行计划,调用存储引擎API来执行查询。...在我们查询过程中,MySQL会维护一个查询状态,也就是我们使用show processlist来进行查看时候一些状态值,例如: sleep,说明线程正在等待客户端发送新请求 query,线程正在执行查询或者正在将结果发送给客户端...04 查询优化处理 查询优化处理包含多个部分,例如解析SQL、预处理、优化SQL执行计划等等,其中: 语法解析器是专门解析MySQL语法,一旦发现错误关键字、数据类型、关键字顺序、字段和数值顺序等等

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

MySQL查询执行基础

当我们希望MySQL能够以更高性能运行查询时,最好办法就是弄清楚MySQL是如何优化和执行查询。...服务器端进行SQL解析、预处理,再由优化器生成对应执行计划 MySQL根据优化器生成执行计划,调用存储引擎API来执行查询 将结果返回客户端 MySQL客户端/服务器通信协议 MySQL客户端和服务器之间通信协议是...在这种情况下,查询不会被解析,不用生成执行计划,不会被执行。 查询优化处理 查询生命周期下一步是将一个SQL转换成一个执行接话,MySQL再按照这个执行计划和存储引擎进行交互。...查询执行引擎 在解析和优化阶段,MySQL将会生成查询对应执行接话,MySQL查询执行引擎则根据这个执行计划来完成整个查询。这里执行计划是一个数据结构,而不是其他很多关系型数据库那样字节码。...相对于查询优化阶段,查询执行阶段并不那么复杂:MySQL只是简单根据执行计划给出指令逐步执行。在根据执行计划逐步执行过程中,有大量操作需要通过调用存储引擎实现接口来完成。

1.3K00

MySQL语句执行顺序

MySQL语句一共分为11步,如下图所标注那样,最先执行总是 FROM操作,最后执行是LIMIT操作。...其中每一个操作都会产生一张虚拟表,这个虚拟表作为一个处理输入,只是这些虚拟表对用户来说是透明 ,但是只有最后一个虚拟表才会被作为结果返回。...,那么就会对上一个join连接产生结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为 止。...SELECT: 执行select操作,选择指定列,插入到虚拟表VT8中。 DISTINCT: 对VT8中记录进行去重。产生虚拟表VT9....ORDER BY: 将虚拟表VT9中记录按照进行排序操作,产生虚拟表VT10. LIMIT:取出指定行记录,产生虚拟表VT11, 并将结果返回。

6.4K100

Mysql语句执行过程

当你希望MySQL能够以更高性能运行查询时,最好办法是弄清楚MySQL是如何优化和执行查询。...查询优化处理(解析SQL、预处理、优化SQL执行计划),将SQL转化成一个执行计划。 解析和预处理:生成一棵解析树(《编译原理》知识),MySQL按照其语法对解析树进行验证和解析查询。...优化器和执行计划:将语法树转化为执行计划(子任务),并选择成本尽量小执行计划。...优化过程书上介绍了很多情况,请参考书籍6.43章 执行计划 MySQL会生成一个指令树,然后通过存储引擎完成这棵树并返回结果 如图2 查询执行引擎  查询执行引擎则根据执行计划来完成整个查询。...在执行计划时,存储引擎通过调用实现接口来完成。 ?  图三 四个表表连接查询执行计划指令树 3.返回结果 如果查询可以被缓存,MySQL将结果存放到查询缓存里。

2.6K20

mysql存储过程执行_mysql存储过程不执行

实战mysql存储程序与定时器 存储过程定时器eventprocedure实战 需求:一个庞大日志表,现每天做定时统计一天总数,放另一个表中,方便查看,运营。...旧方案:用脚本写好程序,用linuxcrontab定时执行。 本文重点,用mysql定时器定时执行存储程序。...‘%%’; 第二步:开启mysql定时器 如果不是on,就执行 Sql代码 set global event_scheduler=1; 不需要重启mysql 会发现mysql多起了一个daemon进程...标注4: [ON COMPLETION [NOT] PRESERVE] ON COMPLETION参数表示”当这个事件不会再发生时候”,即当单次计划任务执行完毕后或当重复性计划任务执行到了ENDS阶段...标注5:[ENABLE | DISABLE] 参数Enable和Disable表示设定事件状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

16.6K20

mysql执行过程

,如果有,取出一个和客户端请求连接上,如果没有,建立一个新连接线程 ?...,然后传输给客户端,否则,解析器会通过分发器交由不同模块处理 如果是没被缓存select,交给优化器模块,如果是表内容或结构更改,交给表变更管理模块,如果是一些更新统计信息、检测、修复、整理之类,交给表维护模块...,如果是复制相关,交给复制模块,请求状态就交给状态收集报告模块 各模块收到请求后,先检查用户是否有目标表权限,如果有,查看此表是否在table cache中,没在cache中就先打开表,取到表后获取对应锁...表变更管理模块打开表后,会根据表meta信息,判断表存储引擎类型和其他相关信息,调用相应存储引擎接口处理 ?...完成请求 连接线程模块将处理结果返回给客户端,然后进行相应清理工作,开始等待后面的请求 ?

2.9K60

Mysql执行过程

Mysql 执行流程 大致流程描述: MySQL客户端通过协议将SQL语句发送给MySQL服务器。...如果无法命中缓存,就继续走到分析器下一步,如果查询命中该缓存时,MySQL会立刻返回结果,跳过了解析、优化和执行阶段 。 不过需要注意是在mysql8.0版本以后,缓存被官方删除掉了。...,同时在这个阶段是自动按照执行计划进行预处理,mysql会计算各个执行方法最佳时间,最终确定一条执行sql交给最后执行器 查询优化器是整个流程中重要一环。...而update会采用两阶段提交方式,记录都redolog中 查询执行计划,就是MySQL查询中执行计划,比如是执行where语句还是from语句,最先执行总是FROM操作,最后执行是LIMIT操作...DISTINCT: 对VT8中记录进行去重。产生虚拟表VT9. ORDER BY: 将虚拟表VT9中记录按照进行排序操作,产生虚拟表VT10.

2.8K20

MySQL执行计划

详细对MySQL执行计划每个字段解释 1.概述 ​ 一条查询语句在经过MySQL查询优化器各种基于成本和规则优化会后生成一个所谓执行计划,这个执行计划展示了接下来具体执行查询方式...,MySQL一般会为其分配一块名叫join buffer内存块来加快查询速度,也就是我们所讲基于块嵌套循环算法 Not exists:当我们使用左(外)连接时,如果WHERE子句中包含要求被驱动表某个列等于...:在许多查询执行过程中,MySQL可能会借助临时表来完成一些功能,比如去重、排序之类,比如我们在执行许多包含DISTINCT、GROUP BY、UNION等子句查询过程中,如果不能有效利用索引来完成查询...,MySQL很有可能寻求通过建立内部临时表来执行查询。...4.总结 ​ 以上介绍了EXPLAIN中各个字段含义,通过EXPLAIN可以查询出可以有效帮助我们了解SQL脚本执行情况。 参考 《MySQL是怎么样运行

84020

MySQL执行查询内部原理

当希望MySQL能够以更高性能运行查询时,最好办法就是弄清楚MySQL是如何优化和执行查询。一旦理解这一点,很多查询优化工作实际上就是遵循一些原则让优化器能够按照预想合理方式运行。...MySQL执行一个查询过程。如图,我们可以看到当向MySQL发送一个请求时候,MySQL到底做了些什么:图片1.客户端发送一条查询给服务器。...2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中结果。否则进入下一阶段。3.服务器端进行SQL解析、预处理,再由优化器生成对应执行计划。4....MySQL根据优化器生成执行计划,调用存储引擎API来执行查询。5.将结果返回给客户端。

91620

MySQL执行sql语句机制

目录 1 概念 2 执行过程 1 概念 连接器: 身份认证和权限相关(登录 MySQL 时候)。...查询缓存: 执行查询语句时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。...第二步,语法分析,主要就是判断你输入 sql 是否正确,是否符合 MySQL 语法。 优化器: 按照 MySQL 认为最优方案去执行执行器: 执行语句,然后从存储引擎返回数据。...首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎接口,返回接口执行结果。...现在最常用存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。

3.8K30

select语句执行流程(MySql

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

7610

数据库MySQL-MySQL执行顺序

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

3.8K20

MySQL】语句执行分析

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

1.6K40

Mysql执行计划

sqlAEXPLAIN sqlA分析执行计划返回结果idid 是 select 执行顺序,id 越大优先级越高,越先被执行,id 相同时下面的先执行.select_typeselect_type说明...SYSTEM系统,表仅有一行(=系统表)possible_keys预计可能使用索引,在不和其他表进行关联时候,查询表时可能使用索引key实际查询过程中使用索引,显示 MySQL 在查询中实际使用索引...返回结果行数占读取行数百分比,值越大越好extra常见有下面几种use filesort:MySQL 需要额外一次传递,以找出如何按排序顺序检索行,如果是这个值,应该优化索引。...:mysql Using join buffer (Block Nested Loop) join连接查询优化 - 飞龙在生 - 博客园 (cnblogs.com)MySQL :: MySQL 8.0...练习题MySQL 执行计划详解 - 云+社区 - 腾讯云 (tencent.com)MySQL索引创建及使用_程序人生-CSDN博客_mysql建立索引

1.3K10

Mysql执行计划

sqlA EXPLAIN sqlA 分析执行计划返回结果 id id 是 select 执行顺序,id 越大优先级越高,越先被执行,id 相同时下面的先执行. select_type select_type...SYSTEM 系统,表仅有一行(=系统表) possible_keys 预计可能使用索引,在不和其他表进行关联时候,查询表时可能使用索引 key 实际查询过程中使用索引,显示 MySQL 在查询中实际使用索引...返回结果行数占读取行数百分比,值越大越好 extra 常见有下面几种 use filesort:MySQL 需要额外一次传递,以找出如何按排序顺序检索行,如果是这个值,应该优化索引。...use temporary:为了解决查询,MySQL 需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列 GROUP BY 和 ORDERBY 子句时。...博客-CSDN 博客_mysql 练习题 MySQL 执行计划详解 - 云 + 社区 - 腾讯云 (tencent.com) MySQL 索引创建及使用_程序人生-CSDN 博客_mysql 建立索引

8810
领券