广告
返回顶部
首页 > 资讯 > 数据库 >mysql 执行流程解析
  • 528
分享到

mysql 执行流程解析

mysql执行流程解析 2021-01-18 04:01:57 528人浏览 才女
摘要

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 Mysql 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等 而存储引擎层负责数据的存储和提取。其架构模式是

mysql 执行流程解析

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 Mysql 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等

而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、 MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB

我们来看一下sql的执行流程

连接器

第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端 建立连接、获取权限、维持和管理连接

连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它

客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时

建立连接的过程通常是比较复杂的,所以在使用中要尽量减少建立连接的动作,也就是尽量使用长连接

但是全部使用长连接后,你可能会发现,有些时候 mysql 占用内存涨得特别快,这是因 为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断 开的时候才释放

怎么解决这个问题呢?你可以考虑以下两种方案。

  1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后, 断开连接,之后要查询再重连。
  2. 如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执 行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态

查询缓存

连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。 MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前 执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询 的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端

如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查 询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可 以直接返回结果,这个效率会很高

但是大多数情况下不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清 空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新 压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次

你可以将参数 query_cache_type 设置 成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存

MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻 底没有这个功能了

分析器

如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什 么,因此需要对 SQL 语句做解析

分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句, MySQL 需要识别出里面的字符串分别是什么,代表什么

做完了这些识别以后,就要做“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法

优化器

经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处 理。

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联 (join)的时候,决定各个表的连接顺序

优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段

执行器

开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返 回没有权限的错误

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

到这里server层就执行完毕 具体的引擎层逻辑我们下一篇文章进行分析

您可能感兴趣的文档:

--结束END--

本文标题: mysql 执行流程解析

本文链接: https://www.lsjlt.com/news/3989.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql 执行流程解析
    Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等 而存储引擎层负责数据的存储和提取。其架构模式是...
    99+
    2021-01-18
    mysql 执行流程解析
  • Mysql 执行流程
    1、逻辑剖析 sql 执行流程为:sql语句 -> 查询缓存 -> 解析器 -> 优化器 -> 执行器。 1.1 服务器处理客户端请求 ​ 客户端程序 connectors >> 连接池 >> SQL接口 >> 解析器 >> 优化器 ...
    99+
    2020-07-21
    Mysql 执行流程
  • 【MySQL】MySQL中SQL执行流程
    文章目录 一、MySQL语句执行流程1.1、主要的原因有以下几点1.2、具体执行流程图如下 二、存储引擎三、MySQL的架构与内部模块四、崩溃恢复时如何判断事务是否需要提交 一、MyS...
    99+
    2023-09-16
    mysql sql 数据库
  • Java类初始化执行流程解析
     测试代码:   package com.test.ClassLaoderTest; public class test1 { public static Strin...
    99+
    2022-11-12
  • MySQL执行SQL语句的流程详解
    目录1、通常sql执行流程1.1 问题1:mysql谁去处理网络请求?1.2 问题2:MySQL如何执行sql语句?1.3 查询解析器1.4 查询优化器1.5 存储引擎1.6 执行器2、总结1、通常sql执行流程 用户...
    99+
    2022-09-25
  • Mysql表连接的执行流程详解
    目录1. 前言1.1 mysql连接的原理1.2 show warnings命令2. 准备工作3. inner join内连接on、where的区别4. left join左连接on、where的区别...
    99+
    2022-08-25
  • mysql中执行查询语句的流程分析
    这篇文章给大家分享的是有关mysql中执行查询语句的流程分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比如,在我们从student表中查询一个id=2的信息selec ...
    99+
    2022-10-18
  • 解析HashMap中的put方法执行流程
    目录引言HashMap底层数据结构put方法的执行流程总结引言 在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也...
    99+
    2022-11-12
  • Mysql Join语句执行流程
    JOIN主要使用 Index Nested-Loop Join 和 Block Nested-Loop Join 算法实现 Index Nested-Loop Join 如果 join on 相关的字段存在索引就使用 Index Nes...
    99+
    2018-10-17
    Mysql Join语句执行流程
  • MySQL架构与执行流程
    前言:   MySQL数据库自己用了也有两三年了,基本上只是掌握增删改查的sql语句,从没有思考过MySQL的内部到底是怎么根据sql查询数据的,包括索引的原理,只知道加了索引查的就快,不知道为什么加上索引效率就会提升,包括索引的限制和优化...
    99+
    2020-05-27
    MySQL架构与执行流程 数据库入门 数据库基础教程 数据库 mysql
  • Mysql 架构及执行流程
    1. mysql 架构 1.1 简化版架构 客户端+ 核心服务 + 存储引擎 ⬇︎ ⬆︎(客户端)⬇︎⬆︎ =====【连接/线程处理】====} ⬇︎ ⬇︎ ...
    99+
    2016-09-17
    Mysql 架构及执行流程
  • MySql执行流程与生命周期详解
    目录一、mysql 客户端二、MySQL 服务端1. 查询缓存2. SQL 解析器3. 查询优化器4. SQL 执行器总结我们经常会在一起讨论怎样优化 SQL、怎样优化数据库,那么请问你知道执行一条 SQL 的过程中都经...
    99+
    2022-09-13
  • springMVC执行流程详解
    springMVC执行流程 一,springMVC执行流程 1,MVC架构的由来 主要由model层,view层和controller层组成。 1.1,jsp模型 主要是结构简单,开发这个小型项目的效率高,主要是由这个jsp和javaBea...
    99+
    2023-08-18
    servlet java mvc 运维 mysql
  • Redisson延迟队列执行流程源码解析
    目录引言demo示例SUBSCRIBE指令zrangebyscore和zrange指令BLPOP指令最后定时器源码解析总结:引言 在实际分布式项目中延迟任务一般不会使用JDK自带的延...
    99+
    2022-11-13
  • Java从源码角度解析SpringMVC执行流程
    SpringMVC执行流程在面试中经常会被问到,本篇文章通过源码的方式简单的了解一下SpringMVC执行流程。 先看流程 先看一下SpringMVC执行流程再看源码,有助理解: ⽤...
    99+
    2023-05-16
    Spring MVC SpringMVC执行流程
  • SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)
    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探...
    99+
    2022-10-18
  • 一文搞懂MySQL执行流程
    目录 一、MySQL技术架构 二、执行流程 1.连接器 2.查询缓存 3.解析SQL 4.执行SQL 总结 一、MySQL技术架构   可以看到,MySQL的技术架构共分为两层:Server层和存储引擎层 Server 层负责建立连接、分...
    99+
    2023-10-27
    mysql 面试 后端 数据库
  • Mysql 更新语句执行流程
    与查询流程不一样的是,更新流程涉及两个重要的日志模块,redo log和 binlog redo log 如果每一次的更新操作都需要写进磁盘,然后磁盘也 要找到对应的那条记录, 然后再更新,整个过程 IO 成本、查找成本都很高 Mysql使...
    99+
    2014-08-15
    Mysql 更新语句执行流程
  • mysql的sql语句执行流程
    1、client和server建立连接,client发送sql至server(对应连接器这一过程) 2、server如果在查询缓存中发现了该sql,则直接使用查询缓存的结果返回给client,如果查询缓存中...
    99+
    2022-10-18
  • java高并发ThreadPoolExecutor类解析线程池执行流程
    目录摘要核心逻辑概述execute(Runnable)方法addWorker(Runnable, boolean)方法addWorkerFailed(Worker)方法拒绝策略摘要 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作