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

MySQL查询执行过程

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

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

MySQL查询执行基础

当我们希望MySQL能够以更高性能运行查询时,最好办法就是弄清楚MySQL是如何优化和执行查询。...查询状态 对于一个MySQL连接或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么: Sleep: 线程正在等待客户端发送新请求 Query: 线程正在执行查询或者正在将结果发送给客户端...查询执行引擎 在解析和优化阶段,MySQL将会生成查询对应执行接话,MySQL查询执行引擎则根据这个执行计划来完成整个查询。这里执行计划是一个数据结构,而不是其他很多关系型数据库那样字节码。...相对于查询优化阶段,查询执行阶段并不那么复杂:MySQL只是简单根据执行计划给出指令逐步执行。在根据执行计划逐步执行过程,有大量操作需要通过调用存储引擎实现接口来完成。...在这个阶段,如果查询是可以被缓存,那么MySQL在这个阶段也将会被存放到查询缓存MySQL将结果集返回给客户端是一个增量地、逐步返回过程。

1.3K00

MySQL 通用查询日志(General Query Log)

1、MySQL日志文件系统组成    a、错误日志:记录启动、运行或停止mysqld时出现问题。    b、通用日志:记录建立客户端连接和执行语句。    c、更新日志:记录更改数据语句。...该日志在MySQL 5.1已不再使用。    d、二进制日志:记录所有更改数据语句。还用于复制。    ...e、慢查询日志:记录所有执行时间超过long_query_time秒所有查询或不使用索引查询。    ...如果没有给定file_name值, 默认名是host_name.log。    mysqld按照它接收顺序记录语句到查询日志。这可能与执行顺序不同。    ...不同于更新日志和二进制日志,它们在查询执行后,但是任何一个锁释放之前记录日志。    查询日志包含所有语句,而二进制日志不包含只查询数据语句。

3.7K30

MySQL查询日志(Slow Query Log)

e、慢查询日志:记录所有执行时间超过long_query_time秒所有查询或不使用索引查询。    ...通过使用--slow_query_log[={0|1}]选项来启用慢查询日志。所有执行时间超过long_query_time秒SQL语句都会被记录到慢查询日志。    ...mysqld在语句执行完并且所有锁释放后记入慢查询日志。记录顺序可以与执行顺序不相同。获得初使表锁定时间不算作执行时间。    ...可以使用mysqldumpslow命令获得日志显示查询摘要来处理慢查询日志。    用查询缓存处理查询不加到慢查询日志,表有零行或一行而不能从索引受益查询也不写入慢查询日志。    ...结构化慢查询日志就是把慢查询日志重要信息按照便于阅读以及按照特定排序方式来提取SQL。

1.6K20

>>技术应用:MySQL查询出现:Query was empty

一、问题出现 今日同事那边暴露出来一个错误,然后截图如下: 根据问题出现原因,大体意思是查询是空或无效 SQL 语句或SQL 语句为空,根据截图自己也百度了下具体问题,意思差多不,但是还是不知道...二、问题出现可能性猜测 根据网上搜寻的答案,大体上有下面几种可能: 1、SQL不存在; 2、MyBatis批量修改出现mysqlSQL不存在,使用是模版QL; 3、mysql数据类型decimal...没有设置默认值,且在执行过程容易出现NPE; 三、问题核对 核对了上述几种情况,发现我这边字段类型使用是decimal,但是不足以造成这种情况,已经核对了SQL脚本正确且已经形成,因为在另一个项目中也是这种情况...,并没有造成Query was empty,此时排除1。...后来了解到,前端在调用接口时,将数据接口调用一次之后存储到了redis,然后每次读取接口并不是实时从项目中获取,而是读取redis数据,而此时数据库SQL模版我这边已经替换掉了,但是redis

34720

MySql Query Cache 查询缓存介绍(1)

MySql Query Cache 查询缓存介绍(1) MySql Query Cache 和 Oracle  Query Cache 是不同, Oracle Query Cache 是缓存执行计划...,而MySql Query Cache 不缓存执行计划而是整个结果集。...咱一个一个来说:  1、Cache 机制对应用程序是透明。在应用程序只是改变查询语句语义,也能得到缓存查询结果集。...如果你没有使用 query_cache_wlock_invalidate=ON   来提示MySql 锁表将要进行写操作,那么此时查询即使表在锁Lock状态下或者预备更新状态下,仍然可以从缓存获得结果集...12、过长时间查询缓存容易造成碎片 fragmentation  ,这一点和Windows磁盘管理碎片整理类似,长时间查询缓存产生碎片对执行效率有一定影响。

1.3K70

MySQL执行查询内部原理

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

91220

MYSQL用法(十九) MySQL查询时”Lost connection to MySQL server during query”报错解决方案

一、问题描述: mysql数据库查询时,遇到下面的报错信息: ? 二、原因分析: dw_user 表数据量比较大,直接查询速度慢,容易"卡死",导致数据库自动连接超时.......方案2.在hosts文件内添加: ip与主机名映射关系[这种方式不用重启] 如: 在hosts文件添加: 127.0.0.1 localhost  其他网上方法: 1....); mysql_query(...); } 也就是说遇到2006,2013错误就重新连接一下MySQL。...MySQL Error 2013: Lost connection to MySQL server during query 错误代码: 1153 - Got a packet bigger than...可以直接在mysql设置: #show variables like '%timeout%'; #show variables like 'max_allowed_packet' set global

6.4K10

MySQL查询执行基础——查询优化处理

可以通过查询当前会话“Last_query_cost”值来MySQL计算的当前查询成本。 这个结果表示MySQL优化器认为大概需要做1040个数据页随机查找才能够完成上面的查询。...MySQL查询静态优化只需要做一次,但是对查询动态优化则在每次执行时都需要重新评估。有时候甚至在查询执行过程也会重新优化。...当索引列包含所有查询需要使用时候,MySQL就可以使用索引返回需要数据,而无需查询对应数据行。 子查询优化 提前终止查询。...MySQL如何执行关联操作 MySQL“关联(join)”比一般意义上理解更加广泛。总的来说,MySQL认为任何一个查询都是一次“关联”——并不仅仅是一个查询需要用到两张表匹配才叫关联。...当前MySQL关联执行策略如下:MySQL对任何关联都执行嵌套循环关联操作,即MySQL现在一个表循环取出单条数据,然后再嵌套循环到下一个表寻找匹配行,依次下去,直到找到所有表匹配行为止。

1.6K10

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...(7)having 对VT6应用having过滤,符合记录放入VT7 (8)select 从VT9挑选出目标列,放入VT8 (9)distinct

5.1K50

Mysql查询语句执行流程

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

4.2K10

MySQL逻辑查询语句执行顺序

在这些SQL语句执行过程,都会产生一个虚拟表,用来保存SQL语句执行结果(这是重点),我现在就来跟踪这个虚拟表变化,得到最终查询结果过程,来分析整个SQL逻辑查询执行顺序和过程。...执行WHERE过滤 对添加外部行得到VT3进行WHERE过滤,只有符合记录才会输出到虚拟表VT4。...由于我测试SQL语句中并没有使用DISTINCT,所以,在该查询,这一步不会生成一个虚拟表。...执行ORDER BY子句 对虚拟表内容按照指定列进行排序,然后返回一个新虚拟表,我们执行测试SQL语句中ORDER BY total_orders DESC,就会得到以下内容: +------...上述结果会存储在VT8执行LIMIT子句 LIMIT子句从上一步得到VT8虚拟表中选出从指定位置开始指定行数据。

3.8K20

一条查询SQL在MySQL是怎么执行

这样在我们以后遇到MySQL一些异常或者问题时候,就可以快速定位问题并解决问题。 下边通过一张图来看一下SQL执行流程,从中可以清楚看到SQL语句在MySQL各个功能模块执行过程。 ?...MySQL拿到一个查询请求后,会先到缓存查查看看,如果之前执行语句就会将执行语句和结果以key-value对形式,被直接存放在内存,key是查询语句,value是结果。...如果查询语句在缓存可以查到这个key,就直接把结果返回给客户端。如果语句不在缓存,就会继续执行后边阶段。执行完成后,将执行结果存入缓存。...MySQL提供了query_cache_type参数来设置是否查询缓存,将该参数设置成DEMAND这样对于默认SQL语句都不使用查询缓存,如果确定需要使用查询缓存语句,可以用SQL_CACHE来显式指定...在数据库查询日志可以看到一个rows_examined字段,表示这个语句执行过程扫描了多少行,这个值是在执行器每次调用引擎时候累加,有时候执行器调用一次,在引擎内部扫描了多行,隐藏引擎扫描行数跟

4.8K20

MySQL】:分组查询、排序查询、分页查询、以及执行顺序

前言 DQL(Data Query Language)是SQL中最重要语言类型之一,用于查询数据库中表记录。在日常业务系统查询操作频率高于增删改操作。...排序查询 排序在日常开发是非常常见一个操作,有升序排序,也有降序排序。...分页查询是数据库方言,不同数据库有不同实现,MySQL是LIMIT。 如果查询是第一页数据,起始索引可以省略,直接简写为 limit 10。 3.3 案例: A....(Data Query Language)分组查询、排序查询和分页查询等常见操作,包括语法、注意事项和实例演示。...全篇总结 本文详细介绍了DQL(Data Query Language)分组查询、排序查询和分页查询等常见操作,包括语法、注意事项和实例演示。

28810

PostgreSQL查询:1.查询执行阶段

PostgreSQL查询:1.查询执行阶段 开始关于PG内部执行机制文章系列。这一篇侧重于查询计划和执行机制。...解析树每个操作都有多个执行选项。例如,您可以通过读取整个表并丢弃不需要行来从表检索特定记录,或者可以使用索引来查询与您查询匹配行。数据集总是成对连接。连接顺序变化会产生大量执行选项。...这里有2个优趣点需要注意: 1) 其中一个初始化表从执行计划树消失了,因为执行计划器指出查询处理不需要它 2) 估算要处理行数和每个节点处理代价 计划查询。...扩展查询协议可以在协议命令级别对单独执行阶段进行精确控制。 准备 在准备期间,查询会像往常一样被解析和重写,但解析树存储在后端内存。PG没有用于解析查询全局缓存。...plane准备好语句已经执行过一次,在接下来2次执行,仍然使用自定义计划,如查询计划参数值所示: EXECUTE plane('763'); EXECUTE plane('773'); EXPLAIN

3K20

Mysql资料 查询SQL执行顺序

具体顺序 1.FROM 执行笛卡尔积 FROM 才是 SQL 语句执行第一步,并非 SELECT 。对FROM子句中前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源数据集。...FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最后表(基础表 driving table)将被最先处理,即最后表为驱动表,当FROM 子句中包含多个表情况下,我们需要选择数据最少表作为基础表...2.ON 应用ON过滤器 对虚拟表VT1 应用ON筛选器,ON 逻辑表达式将应用到虚拟表 VT1各个行,筛选出满足ON 逻辑表达式行,生成虚拟表 VT2 。...11.ORDER BY 排列 将虚拟表 VT9行按ORDER BY 子句中列/列表排序,生成游标 VC10 ,注意不是虚拟表。因此使用 ORDER BY 子句查询不能应用于表达式。...同时,ORDER BY子句执行顺序为从左到右排序,是非常消耗资源。 12.LIMIT/OFFSET 指定返回行 从VC10开始处选择指定数量行,生成虚拟表 VT11,并返回调用者。

3.2K00
领券