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

一条SQL语句MySQL如何执行

前两天发了一条SQL慢原因有哪些,在那篇文章我没有说到优化器之类,我觉得如果配合一条SQL是如何执行,会更好,所以特地找了一篇。...来源:JavaGuide | 作者:木木匠 本篇文章会分析一个 sql 语句 MySQL执行流程,包括 sql 查询 MySQL 内部会怎么流转,sql 语句更新是怎么完成。...一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 一个简要架构图,从下图你可以很清晰看到用户 SQL 语句 MySQL 内部是如何执行。...二 语句分析 2.1 查询语句 说了以上这么多,那么究竟一条 sql 语句如何执行呢?其实我们 sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。...2.2 更新语句 以上就是一条查询 sql 执行流程,那么接下来我们看看一条更新语句如何执行呢?

3.5K20

一条SQL语句MySQL中是如何执行

来源:http://t.cn/E6U9Z9T ---- 概览 本篇文章会分析下一个sql语句mysql执行流程,包括sql查询mysql内部会怎么流转,sql语句更新是怎么完成。...第二步,语法分析,主要就是判断你输入sql是否正确,是否符合mysql语法。 完成这2步之后,mysql就准备开始执行了,但是如何执行,怎么执行是最好结果呢?这个时候就需要优化器上场了。...二、语句分析 2.1 查询语句 说了以上这么多,那么究竟一条sql语句如何执行呢?其实我们sql可以分为2中,一种是查询,一种是更新(增加,更新,删除)。...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。...进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎执行结果。 2.2 更新语句 以上就是一条查询sql执行流程,那么接下来我们看看一条更新语句如何执行呢?

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

MySQL一条SQL语句如何执行

例如一个简单SQL语句mysql> select * from T where ID=10; ? MYSQL 内部是怎么执行呢?我们从头梳理一下。...这两种执行方法逻辑结果是一样,但是执行效率会有不同,而优化器作用就是决定选择使用哪一个方案。 比如一个表中有多个索引,具体使用哪一个?也是由优化器来决定。 ?...执行基本执行逻辑: 调用存储引擎“取满足条件第一行”这个接口,然后循环取“满足条件下一行”这个接口,将所有满足条件行组成结果集返还给客户端。 ? 至此,这个语句执行完了。...server 层包括连接器、分析器、优化器、执行器,涵盖 MySQL 核心服务,以及所有的内置函数(如日期、时间、数学、加密函数等),还有所有跨存储引擎功能,例如存储过程、触发器、视图等。...其实 server 层中还有一个查询缓存,一个语句进来后先看是否缓存中有,如果有就直接返回,如果没有再走分析器,但由于实际环境中查询缓存作用很小,上面的描述中就没有提及,而且 MySQL 8 中已经去掉了查询缓存

1.5K20

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

比如,你有个最简单表,表里只有一个 ID 字段,执行下面这个查询语句时: mysql> select * from T where ID=10; 我们看到只是输入一条语句,返回一个结果,却不知道这条语句...下面我给出MySQL 基本架构示意图,从中你可以清楚地看到 SQL 语句 MySQL 各个功能模块中执行过程。 ?...但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 执行过程中临时使用内存是管理连接对象里面的。这些资源会在连接断开时候才释放。...(2)如果你用MySQL 5.7 或更新版本,可以每次执行一个比较大操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。...你输入是由多个字符串和空格组成一条 SQL 语句MySQL 需要识别出里面的字符串分别是什么,代表什么。 MySQL 从你输入"select"这个关键字识别出来,这是一个查询语句

1.5K30

MySQL一条SQL语句执行过程

一条select语句执行流程 第一步:连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。如果用户名密码验证通过后,连接器会到权限表里面查出你拥有的权限。...之后该连接权限验证都依赖于刚查出来权限。 第二步:查询缓存 当获取连接后,一条SELECT语句会先去查询缓存,看之前是否执行过。如果获取到缓存后就执行返回,不然继续后面的步骤。...第三步:分析器 分析器首先会做“词法分析”,MYSQL会识别出SQL语句里面的字符串是什么以及代表什么。接下来就是“语法分析器”,分析SQL语法问题。...打开表时候,执行器就会根据表引擎定义,去使用这个引擎提供接口。 图片 一条update语句执行流程 update语句除了会执行上面的五步,还会涉及两个重要日志模块。...否则先从磁盘读入内存中,然后返回。 执行器拿到了引擎返回数据行,把这个n值+1,得到新行数据,然后调引擎接口写入这行新数据。

22120

SQL语句MySQL中是如何执行

mysql> select * from T where ID=10; 开门见山,当我们输入一条 SQL 语句时候,MySQL 内部究竟执行了什么?...MySQL 拿到一个查询语句,会先查询缓存,先校验这个语句是否执行过,以 key-value 形式存在内存里, Key 是查询预计,Value 是结果集。...分析器 如果没有命中缓存,那么就进入分析器,主要就是分析 SQL 语句是拿来干嘛,也就是解析该语句生成语法树,会分为两步: 第一步:词法分析, 一条 SQL 语句有多个字符串组成,首先要提取关键字,比如...优化器 经过了分析器分析,MySQL 知道你要干啥了,开始执行之前,还要先经过优化器处理。...优化器作用就是它认为最优执行方案去执行(虽然有时候也不是最优),比如多个索引时候该如何选择索引,多表查询时候如何选择关联顺序等。

4.3K20

MySQL实战 -- 一条SQL更新语句如何执行

前面我们系统了解了一个查询语句执行流程,并介绍了执行过程中涉及处理模块。相信你还记得,一条查询语句执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。...那么,一条更新语句执行流程又是怎样呢? 之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒状态,惊叹同时,你是不是心中也会不免会好奇,这是怎样做到呢?...我们还是从一个表一条更新语句说起,下面是这个表创建语句,这个表有一个主键 ID 和一个整型字段 c: mysql> create table T(ID int primary key, c int)...接下来,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。然后,执行器负责具体执行,找到这一行,然后更新。...这里我给出这个 update 语句执行流程图,图中浅色框表示是 InnoDB 内部执行,深色框表示是执行器中执行。 ?

81630

一条SQL语句如何执行

一条SQL语句如何执行? 首发于GitHub开源项目: Java超神之路 你好,我是杜少雄。 今天和大家聊一聊MySQL基础架构。我们经常说,看一个事千万不要直接陷入细节里。应该先鸟瞰全貌。...当一条SQL语句执行时候,我们看到是最后执行结果。却不知道这条语句MySQL内部是如何执行。 总览 所以今天我们把MySQL拆解一下,看看里边有哪些零件。下边是MySQL基本架构示意图。...但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 执行过程中临时使用内存是管理连接对象里面的。这些资源会在连接断开时候才释放。...如果你用MySQL 5.7 或更新版本,可以每次执行一个比较大操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。...你输入是由多个字符串和空格组成一条 SQL 语句MySQL 需要识别出里面的字符串分别是什么,代表什么。 MySQL 从你输入"select"这个关键字识别出来,这是一个查询语句

1.1K50

Mysql实战之一条SQL查询语句如何执行

sql,都会说,很简单一个查询语句执行结果是查询order表中id=10所有数据,但是大家知道这个sqlMysql内部是如何执行吗?...sql语句会先走缓存,如果命中缓存,就直接返回结果,如果没有命中缓存,则继续往下执行由于mysql8.0之后查询缓存模块已经被删除,咱们也就不详细讲解这一块了5....就知道你要做什么了,但是具体执行之前,还会针对你sql语句进行优化优化器是表里面有多个索引时候,决定使用哪个索引;或者一个语句有多表关联(join)时候,决定各个表连接顺序。...判断t2里面d值是否等于20既可以先从表t2里面取出d=20记录id值,根据id值关联表t1,判断t1里面c值是否等于10 上面两种执行方法最终结果是一样,但是执行效率确不相同,优化器作用就是决定使用哪一种执行方法...优化器执行完成后,语句执行就具体确定下来了,然后就会进入到执行器阶段了7.执行mysql通过分析器知道了你要做什么,通过优化器知道了该怎么做,执行器就负责通过存储引擎执行sql了比如:select

1.1K10

一条 SQL 语句如何执行

1. select 语句执行过程 一条 select 语句执行过程如上图所示 1、建立连接 连接器会校验你输入用户名和密码是否正确,如果错误会返回提示,如果正确,连接器会查询当前用户对于权限。...连接器作用就是校验用户权限 2、查询缓存 MySQL 中有个缓存概念,当你执行一条 SQL 查询语句时,MySQL 会先去缓存中查看是否有对应记录,如果有,则直接返回,如果没有,则取数据库中查询...这个查询缓存目的是为了加快 MySQL 查询速度。 这里建议你将这个缓存选项关闭上,因为实际项目中,这个查询缓存用处不大,为什么这么说。...对于 select 语句而言,MySQL 拿到这条 SQL 语句后,识别出 select 关键词,知道这是一条查询语句,然后再取识别 from 以及表名,识别字段,这个步骤是词法分析。...binlog 上面说 redo log 是引擎层日志,那么 binlog 则是 MySQL Server 层日志 binlog 主要是记录 MySQL 原始操作语句,比如 update user

64720

Mysql进阶篇--一条sql查询语句如何执行

开发阶段我们经常使用查询语句,但是一条语句查询是如何执行呢,如下语句 mysql> select * from depart; 日常中,我们只看到返回一条或多条结果,并没有过多去关注查询语句具体要执行那些流程...定期断开长连接,使用一段时间之后,或者一个大查询执行之后,断开重新,之后查询重新链接 如果使用mysql5.7以及以上,可以使用mysql_restart_connection来初始化链接资源...显示指定查询缓存,也可以使用参数query_cache_type设置成DEMAND,禁止使用缓存 select SQL_CACHE * from dpet; 分析器 一条查询语句分析其中是要进行语法分析和词法分析...,接下来,我们就要进行优化器处理,一条语句执行是有多个索引,到底执行那个索引是由优化器来决定,比如下面的语句 select * from A a inner join B b on a.id=...执行器 分析器分析你要干什么,优化器分析你要怎么执行,真正执行执行器中执行 一条语句执行判断查询表是否有权限,如果没有返回报错,如果有权限直接打开表,然后根据表引擎定义,使用引擎查询接

95020

MySQL执行计划 explain 及 一条select语句MySQL奇幻之旅

文章目录 示例 解释 一条select语句MySQL奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...type:此列是优化SQL语句时最需要关注列之一,此列显示了查询使用了何种类型。...index_merge:查询语句使用了俩个以上索引,常见使用and、or会出现,官方文档将此类型放在ref_or_null之后,但是很多情况下由于读取索引过多性能有可能还不如range unique_subquery...key:上面写着 rows:这是mysql估算需要扫描行数(不是精确值)。这个值非常直观显示 SQL 效率好坏, 原则上 rows 越少越好。 extra:大多数情况下会出现以下几种情况。...:对数据使用一个外部索引排序 Using index condition:使用了索引下推 一条select语句MySQL奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为

1.2K20

一条 SQL 查询语句如何执行

一条 SQL 查询语句如何执行?...比如,你有个最简单表,表里只有一个ID字段,执行下面这个查询语句mysql> select from T where ID=10; 我们只看到一个输入语句,返回一个结果,却不知道这个 SQL 语句...你输入是由多个字符串和空格组成一条SQL语句MySQL需要识别出里面的字符串分别是什么,代表什么,MySQL从你输入" select"这个关键字识别出来,这是一个查询语句。...,所以你要关注是紧接“ use near"内容, 优化器 经过了分析器,MySQL 知道要做什么了,那么开始执行之前,还要进行优化器处理,优化器表里面有多个索引时候,决定使用哪个索引;或者一个语句多表关联时候.../n1-slow.log #访问次数最多10个sql语句 mysqldumpslow -s c -t 10 /var/lib/mysql/n1-slow.log #访问记录集最多10个sql mysqldumpslow

77910

一条更新语句如何执行

一条更新语句如何执行? 之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒状态,惊叹同时,你是不是心中也会不免会好奇,这是怎样做到呢? 这个需要从一个表,一条更新语句说起。...执行语句前,需要连接器工作,一个表上有更新时候,跟这个表有关缓存会失效,所以这条语句会把表 T 上所有缓存结果都清空,这也是为啥不推荐使用查询缓存原因。...分析器通过词法和语法分析这条更新语句,优化器决定要使用 ID 这个索引,然后执行器具体执行,找到这一条,然后更新。...MySQL 采用 WAL 技术,Write Ahead Loging,关键点是先写日志再写磁盘,具体执行如下:当有一条记录需要更新时候,InnoDB 引擎会先把记录写到 redo log里,并更新内存...“追加写”是指 binlog 文件 写到一定大小后会切换到下一个,但是不会覆盖以前日志。 InnoDB 引擎执行 update 语句内部流程? 执行器先找引擎 取 id =2 这一行。

52110

一条sql查询语句如何执行

本文通过一条sql语句来讲述mysql基础架构 select * from jiuxiao_admin_log where user_id =1000; ?...好了现在我们大致了解了mysql零件,那么现在我们将通过一条查询sql,从连接器到执行器来讲清楚每层作用。...但是使用长连接后,内存通常涨非常快,这是因为MySQL执行过程中临时使用内存是管理连接对象里面的。这些资源会在连接断开时候才释放。...我们可以通过,内存到达一定大小后杀掉连接再重新连接,如果你用MySQL 5.7或更新版本,可以每次执行一个比较大操作后,通过执行 mysql_reset_connection来重新初始化连接资源...开始执行之前,还要先经过优化器处理。 优化器是表里面有多个索引时候,决定使用哪个索引;或者一个语句有多表关联(join)时候,决定各个表连接顺序。

1.1K20

Mysql系列】(二)日志系统:一条更新语句如何执行

,而且也不需要服务器,本地也能跑起来 首发博客地址 系列文章地址 上篇文章我们介绍了一个查询语句执行流程,并介绍了执行过程中涉及处理模块。...一条查询语句执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条语句更新流程是什么样MySQL可以恢复到半个月内任意一秒状态,是怎么做到?...优化事务写入操作:可以通过优化事务写入操作,减少对redo log写入量。例如,可以合并多个小事务为一个大事务,减少redo log写入次数。...因此,redo log写入是事务执行期间进行,以提供更好性能。...假设当前 ID=2 行,字段 c 值是 0,再假设执行 update 语句过程中写完第一个日志后,第二个日志还没有写完期间发生了 crash,会出现什么情况呢?

19720
领券