精华内容
下载资源
问答
  • mysql查询语句执行流程
    2022-04-04 18:37:12

    Mysql整理记录Day1

    假设现在有一张简单的表,只有id一个字段,执行以下语句:

    selct * from T where id=10;
    

    现在我们来探索下,这条语句的执行都经历了哪些步骤
    在这里插入图片描述 mysql逻辑架构图

    连接器

    mysql -h$ip -P$port -uroot -p123456
    

    第一步连接数据库,连接器负责跟客户端建立连接、获取权限、管理连接。其中:mysql是客户端工具,用来和服务端建立连接。连接需要Tcp三次握手,握手成功后,连接器开始验证身份。如果通过验证,连接器回到权限表中查询你拥有的权限。

    分析器

    连接成功后,mysql需要分析语句,知道你要执行什么操作。

    优化器

    在表里有多个索引的时候,决定使用哪个索引;或者再多表关联(join)的时候确定表的连接顺序。

    执行器

    开始执行前,会先判断你是否有权限执行该语句,没有会返回没有权限错误;如果有权限,调用引擎接口执行。

    执行流程

    id没有索引:

    1. 调用InnoDB引擎接口,取到表T的第一行,判断id是否等于10,如果不是则跳过,如果是将该行记录加入到结果集。
    2. 取下一行,重复判断,直到取到最后一行
    3. 返回结果集,执行结束

    如果id上有索引,执行逻辑大同小异,第一次调用“取满足条件的第一行”,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎定义好的。

    笔记参考于极客时间《MySQL实战45讲》

    更多相关内容
  • 在解释这条语句执行流程之前,我们看看mysql的基础架构。 图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。 server层包括连接器、查询缓存、分析器、优化器、执行器涵盖 MySQL 的大多数核心服务功能,...
  • Server层包括连接器、查询缓存、分析器、优化器、执行器等,包括了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器...

    MySQL的基本架构图 :

            MySQL可以分为Server层和存储引擎层两部分。

            Server层包括连接器、查询缓存、分析器、优化器、执行器等,包括了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

            而存储引擎层负责数据的存储和提取。支持InnoDB、MyISAM、Memory等多个存储引擎。最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。也可以通过指定存储引擎的类型来选择别的引擎,比如在create table语句中使用engine=memory, 来指定使用内存引擎创建表。不同的存储引擎共用一个Server层

     

    我们在数据库执行一条查询语句:

    SELECT * FROM `user_info` WHERE id = 1;

    第一步:连接器

    首先,我们需要连接到数据库上,输入ip和端口后,然后可以在执行完命令后输入密码,连接上数据库;

    mysql -h$ip -P$port -u$user -p

            连接成功之后,即使管理员修改了该用户的权限,也只能在下次连接中生效,不会影响已经打开的连接;如果客户端长时间没有请求,连接器就会自动断开,默认是8小时,这里可以通过wait_timeout参数控制

    第二步:查询缓存

            连接建立完成后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果存在缓存就取缓存数据;没有查询到缓存,就会继续往下执行。

    MySQL也提供了参数,可以按需来查询缓存,将参数query_cache_type设置成DEMAND,这样默认就是不查询缓存,在我们需要查询缓存是,在select后加一个参数SQL_CACHE,如下:

    SELECT SQL_CACHE * FROM `user_info` WHERE id = 1;

            但是大多数情况下不建议查询缓存,因为缓存更新特别频繁,每次对表的更新都会刷新缓存,更新语句会把表上所有的缓存都清空,对于更新压力比较大的数据库,缓存命中率就会特别低。而且需要注意的是,MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0开始彻底没有这个功能了。

    第三步:分析器

            分析查询语句是否符合SQL语法,会识别SELECT来判断是查询语句,识别user_info为表名,识别id为列名。如果不符合语法,MySQl会提示错误信息:

    You have an error in your SQL syntax

    第四步:优化器

            分析完成后,数据库就知道要做什么,接下来要处理怎么做的问题。优化器是在表中存在多个索引时,判断使用哪个索引进行查询;或者在多表联查时(join)决定各表的连接顺序等;优化器执行完以后,进行真正的执行操作;

    第五步:执行器

    MySQL分析出要怎么做之后,就会去打开表,打开表之前会再次进行权限校验,如果有权限则打开表

    打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

            1、调用InnoDB引擎接口取这个表的第一行,判断ID值是不是1,如果不是则跳过,如果是则将这行存在结果集中;

            2、调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。

            3、执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

    通过EXPLAIN也可以查询到最后查询遍历的多少行数据:

    EXPLAIN SELECT * FROM `user_info` WHERE id = 1;

     结果可以看到扫描了多少行数据:

    展开全文
  • 一条sql语句执行时,在mysql内部的流程是怎样的呢? 这里对mysql内部拆解一下,这样当碰到mysql的一些异常或者问题时,能快速定位解决问题 先看下mysql的逻辑架构图 大体来说,mysql可以分为Server层跟存储引擎...

    一条sql语句执行时,在mysql内部的流程是怎样的呢?
    这里对mysql内部拆解一下,这样当碰到mysql的一些异常或者问题时,能快速定位解决问题

    • 先看下mysql的逻辑架构图
      mysql逻辑架构

    大体来说,mysql可以分为Server层跟存储引擎层两部分

    • Server层包括连接器,查询缓存,分析器,优化器,执行器等,涵盖mysql的大多数核心服务功能,以及所有的内置函数(如日期,时间,数学和加密函数等,)所有的跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。还有一个通用的日志模块 binglog日志模块。
    • 存储引擎层负责数据的存储和提取。期架构模式是插件式的,支持InnoDB,MyISAM,Memory多个存储引擎。现在最常用的存储引擎是InnoDB,他从Mysql5.5.5版本开始成为了默认存储引擎,InnoDB引擎有自有的日志模块redolog 模块。
    1. 连接器

    主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

    1. 查询缓存

    mysql拿到一个查询请求后,回先到缓存看看,之前是不是执行过这条语句,之前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果你的查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端

    不建议使用缓存!

    查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存就会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存命中的效率会非常低。
    对于不经常更新的数据来说,使用缓存还是可以的,Mysql 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。

    1. 分析器

    mysql 没有命中缓存,那么就会进入分析器,分析器主要是用来分析SQL语句是来干嘛的,分析器也会分为几步:

    1. 词法分析,一条SQL语句有多个字符串组成,首先要提取关键字,比如select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。

    1. 语法分析,主要就是判断你输入的sql是否正确,是否符合mysql的语法。

    完成这2步之后,mysql就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。

    1. 优化器

    优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。

    1. 执行器

    当选择了执行方案后,mysql就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。

    展开全文
  • Mysql中select语句执行流程 1、mysql架构 mysql结构(照片有点模糊,但是不妨碍理解。大家也可自行查找) mysql主要功能模块: 1)连接器(连接/线程处理器):主要负责管理客户端连接,权限验证。 2)查询缓存:负责...

    Mysql中select语句执行流程

    1、mysql架构

    在这里插入图片描述mysql结构(照片有点模糊,但是不妨碍理解。大家也可自行查找)
    mysql主要功能模块:

    1)连接器(连接/线程处理器):主要负责管理客户端连接,权限验证。
    2)查询缓存:负责缓存查询结果。
    3)解析器:对sql语句进行词法分析,语法分析,校验sql语句。
    4)优化器:对解析器解析完成的sql生成执行计划,选择索引。
    5)存储引擎:存储数据,负责提供读写接口。
    

    其中1)至4)称为mysql服务层,5)称为mysql的存储引擎层。

    2、select语句执行流程

    	有了上面图的理解,大家大致对mysql的结构有了大致的了解。
    	下面以对select语句的执行流程进行简单介绍, 假定sql语句:select * from table
    

    1)建立连接

      mysql -h ip  -p port -u user -p
      password
      通过上面的语句和mysql服务器建立连接。如果用户名和密码不对,则会显示“Access denied for user” 的提示。
    

    2)查询缓存

    	建立完连接之后,select语句执行到第二步,查询缓存。之前执行的sql语句结果会以key-value对的形式被缓存到内存中。key是sql语句,value是查询结果。如果select语句在key中,则直接返回value给客户端。
    	如果缓存中查询不到,就会继续执行后续阶段。执行完后将结果缓存到内存中,用于下次查询。(缓存失效非常频繁,例如update之后则会清空缓存)。
    

    3)解析器

    	对于缓存失效之后,则解析器会对sql语句进行分析。先对sql语句进行词法分析,分析select * from table是否符合mysql的语法规范。然后对sql语句进行语法分析,如果sql语句不对,则会显示You have an error in your SQL syntax的错误提醒。请仔细检验sql语句语法是否规范。
    

    4)优化器

    	经过解析器解析之后,mysql就知道需要做什么。在开始执行之前,优化器根据表中的索引选择使用哪个索引,或者是join时选择表连接的顺序。从而选择最优方案。
    

    5)优化器

    经过解析器之后,mysql知道做什么,经过优化器之后,mysql知道怎么做。
    开始执行前,mysql先判断用户是否拥有查询权限,如果没有权限,返回没有权限的错误。即使是命中缓存,在返回结果时,也会做权限验证。最终返回查询结果。
    

    3、总结

    mysql中的select语句的执行流程大致如上所述。

    以上内容仅是个人理解,如果理解有不对的地方欢迎指出,大家共同理解。

    展开全文
  • 一条查询语句是如何执行查询语句执行分为以下几步:查询缓存解析器生成解析树预处理...1.MySQL 拿到一个查询请求后先会在查询缓存中看看是否执行过此语句,之前执行语句会以 key-value 的形式缓存在内存中,...
  • 返回结果给客户端首先先简单的将一个查询语句背后MySQL做了什么捋一捋: 客户端发送一条查询给服务器。 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一个阶段。 服务器端...
  • 熟练掌握SQL的执行流程非常非常的重要!! 本文主要就是三点; 1. 不建议开启查询缓存 2. SQL的执行过程主要是:SQL语句-->查询缓存-->解析器--->优化器--->执行器 3. 通过 select profiles可以查询所有sql的执行耗时...
  • MySQL——update 语句执行流程

    千次阅读 2022-02-10 09:38:09
    图1 update语句执行流程 从 Buffer Pool(内存中) 中查看是否有这条数据,没有就从磁盘中加载到缓冲池,然后对这行记录加独占锁; 把更新行记录的旧值写入 undo log(以便回滚); 更新 Buffer Pool 中的数据(成脏...
  • MySQL - MySQL查询语句执行过程

    万次阅读 2022-04-21 19:38:40
    需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID =...Server层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图.
  • 最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句mysql中的执行流程,包括sql的查询mysql内部会怎么流转,sql语句的更新是怎么完成的。...
  • MySQL--一条SQL查询语句执行流程

    多人点赞 2021-11-09 23:25:15
    本文介绍MySQL中一条SQL查询语句执行流程。 此问题也是Java后端面试中常见的一个问题。 流程概述 说明 MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层 包括连接器、查询缓存、分析器、优化器、...
  • title: “SQL语句MySQL中的执行流程” date: 2022-02-25T15:28:58+08:00 draft: false 文章目录1 基本架构概述2 组件介绍2.1 连接器2.2 查询缓存2.3 分析器2.4 优化器2.5 执行器 1 基本架构概述 MySQL 分为两...
  • 昨天参加平安面试问了我一个问题:说说MySQL 执行一条查询语句的内部执行流程? 客户端先通过连接器连接到 MySQL 服务器; 连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回...
  • MySQL语句执行顺序

    千次阅读 2022-01-10 11:14:42
    目录 语句中各子句完整执行顺序概括(按照顺序号执行): 每个子句执行顺序分析 语句中各子句完整执行顺序概括(按照顺序号执行): ...所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为
  • 我们可能每天都或多或少的写一些SQL语句,但是你有没有思考过MySQL接收到SQL的执行命令之后底层是如何执行的呢,从这篇文章开始我们开始揭开MySQL底层执行过程的面纱。 首选创建表 create table user_info ( id ...
  • Mysql查询语句执行过程及运行原理

    万次阅读 多人点赞 2018-10-22 22:36:21
    Mysql查询语句执行原理 数据库查询语句如何执行? DML语句首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树。 语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是否具有操作...
  • MySQL 8.0 SQL 执行流程

    千次阅读 2022-03-23 23:10:22
    MySQL 8.0 SQL 执行流程 首先我们先来看下 MySQL 的经典架构图,8.0 的没怎么翻到,先看看这个了。 图上有这么几个模块: Collectos 连接器,客户端可以通过这些方式对 MySQL 服务端发起通信。 Services & ...
  • 查询执行流程--->语句执行顺序来探讨一下其中的知识。从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQLLayer’,下层是各种各样对上提供接口的存储引擎,被称为‘StorageEngineLayer’。...
  • 详细介绍了Mysql的基础架构以及一条查询sql的执行流程
  • Mysql语句执行逻辑

    千次阅读 多人点赞 2022-02-28 19:55:39
    一条SQL查询语句执行流程 select * from table where Id=4 要弄懂这条语句做的事情,我们先看下mysql整个架构涉及的 分为客户端,server端以及存储引擎,存储引擎层负责数据的存储和提取,其架构模式是插件式的,...
  • 根据mysql慢日志监控SQL语句执行效率 启用MySQL的log-slow-queries(慢查询记录)。 在Linux环境下先要找到my.cnf文件(一般在/etc/mysql/),然后可能会发现该文件修改后无法保存,原因是你没有相应的权限,可以从属性...
  • 转载自mysql 实战 作者:阿里丁奇这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构。...比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:mysql> select * f...
  • mysql执行查询流程

    2021-11-11 11:38:33
    流程图如下 1. 客户端发送一个查询mysql服务器 2. 服务器查询缓存,如何缓存命中,直接返回查询结果,否则执行后续...4. mysql根据优化器生成的执行计划,调用存储引擎的api执行查询、 5. 返回对应的查询结果 ...
  • 背景之前一直以为MySQL的多表关联查询语句是首先对FROM语句的前两张表执行笛卡尔积,产生一张虚拟表,然后使用ON过滤和OUTER JOIN添加外部行,再使用过滤后的虚拟表跟第三...查询执行流程->SQL解析顺序问题描述最...
  • mysql语句过程及执行流程

    千次阅读 2017-11-07 09:53:21
    1.用户在发出sql命令之后,mysql的线程管理器会建立或者重用一个线程,建立client到mysql服务器的连接。mysql会根据用户名和用户IP(或主机名),在mysql.user... Module记录常规日志(所以常规日志中记录的是mysql执行
  • mysql 一条sql执行流程

    2021-01-27 13:37:39
    1.1 select语句执行过程下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。先简单介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图,连接器: 身份认证和...
  • Mysql 执行一条语句的过程

    千次阅读 2022-03-11 14:37:34
    Mysql的逻辑架构 Mysql的逻辑架构如下所示,整体分为两部分,Server层和存储引擎层。 与存储引擎无关的操作都是在Server层完成的,存储引擎层负责数据...但是长连接也有优化的空间,即长连接过多,随着执行大的查询操作
  • Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 代码如下: IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,335
精华内容 39,334
关键字:

mysql查询语句执行流程

mysql 订阅