学习了极客时间MySql课程,做个总结 以一条select语句为例:select * from T where ID=4 ,梳理下执行的流程 一条sql语句在执行过程中需要经过连接器、分析器、优化器、...查询缓存 在经过连接器之后,会执行第二步查询缓存,在MySql拿到查询后,会先到查询缓存查看是否执行过这条语句,之前执行的结果会以key-value对的形式存在,如果不在查询缓存中,会继续执行后面的极端...在MySql8.0之后去掉了查询缓存的功能。...分析器 分析器会先做“词法分析”,识别出sql里的字符串分别是什么,读出“select”关键字对出这是一条查询语句,把字符串T识别成“表T” “语法分析”,根据词法分析的结果,判断该条sql是否满足MySql...的语法 优化器 优化器的作用在于选择最优的逻辑执行sql,例如在一个语句进行多表关联的时候,决定各个表的连接顺序 执行器 在开始执行前,先判断你对表T是否有执行查询的权限,没有就返回没有权限的错误,有权限则继续执行
MySQL语句的执行流程 下图是一条查询sql语句的执行流程: ? 1.1 通信协议 我们的程序或者工具要操作数据库,第一步要做什么事情?当然是跟数据库建立连接。...当然,这个执行计划是不是一定是最优的执行计划呢?不一定,因为 MySQL 也有可 能覆盖不到所有的执行计划。我们怎么查看 MySQL 的执行计划呢?比如多张表关联查询,先查询哪张表?...MySQL体系结构总结: 基于上面分析的流程,我们一起来梳理一下 MySQL 的内部模块。 2.1 模块详解 ?...更新语句的执行流程: 讲完了查询流程,我们是不是再讲讲更新流程、插入流程和删除流程?更新流程和查询流程有什么不同呢?基本流程也是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。...binlog 的另一个功能就是用来实现主从复制,它的原理就是从服务器读取主服务器的 binlog,然后执行一遍。 更新语句的整体流程图: ?
官方的图 ---- ? 自行画的图 ---- ? 第一步: 连接器 首先我们要连接上这个数据库,连接器负责建立连接,判断认证是否通过等。...第二部: 查询缓存 mysql拿到请求后首先判断请求的查询语句是否有缓存,是否命中缓存,但是不推荐使用mysql的缓存,官方也不推荐,因为只要有一条数据更新表的缓存就会被删除,降低效率 第三步: ...分析器 没有命中缓存的话就要开始执行语句了,首先对sql语句进行解析, 首先做 “词法解析”,分析出sql语句的关键词等字符串代表什么含义,然后通过”语法分析“判断这个sql是否满足语法标准。...第四步: 优化器 优化sql执行的速度,比如执行的索引、表连接(join)的执行顺序,然后决定出最快的执行方案 第五步: 执行器 判断用户对这个表是否有权限,有的话就会根据这个表的引擎执行通过优化器给出的最优执行方案去执行
MySQL 连接器(MySQL Connector)是用于连接和与 MySQL 数据库进行交互的驱动程序。它提供了与 MySQL 数据库服务器通信的功能,包括建立连接、执行查询、更新数据等。...连接器连接流程 mysql -hip -Pport -uuser -p 是一个连接到 MySQL 服务器的命令,其中 ip 是要连接的 MySQL 服务器的主机名或 IP 地址,port 是 MySQL...执行 mysql 可执行文件后,会启动一个 MySQL 客户端程序。这个程序是用 C 或 C++编写的,负责与 MySQL 服务器进行通信。...MySQL 优化器是一个智能的查询执行计划生成器,它会根据查询语句和表的信息,通过优化算法来选择最佳的查询执行策略。...执行器 什么是 MySQL 执行器 MySQL 执行器(MySQL Executor)是 MySQL 数据库的一个组件,负责执行查询语句并返回结果。
MySQL 8.0 SQL 执行流程首先我们先来看下 MySQL 的经典架构图,8.0 的没怎么翻到,先看看这个了。...图上有这么几个模块:Collectos连接器,客户端可以通过这些方式对 MySQL 服务端发起通信。Services & utilities?...执行器先会判断当前是否具有权限,然后才会去执行相应的 SQL 语句。Caches缓存命中,8.0 中已经被干掉了。...比如他是将 SQL 语句作为 key 进行命中匹配的,如果 SQL 中多加了一个空格也会被认为不是同一条 SQL 导致匹配不到。Pluggable storage Engines数据库的执行引擎插件。...文件系统这个是存放 MySQL 的文件系统。SQL 执行流程SQL 流程是 SQL --> 解析器 --> 优化器 --> 执行器 --> 返回结果。下面会将各个组件单独拉出来做分析。
一、update跟踪执行配置 使用内部程序堆栈跟踪工具path_viewer,跟踪mysql update 一行数据的执行过程,配置执行脚本:call_update.sh DROP DATABASE...THREADS.inf 362689_5.txt 362690.dat 362691.inf 362699_5.txt 362706.dat 362717.inf FUNC_DEF 查看SQL执行的函数调用过程...(THD*) --更新语句实际执行的引用消解 Sql_cmd_update::execute_inner(THD*) --SQL引擎层,调用存储引擎接口执行 Sql_cmd_update::update_single_table...pool 中table 的row trans_commit_stmt(THD*, bool) innoDB关键更新执行过程 ha_innobase::update_row: row_get_prebuilt_update_vector...三、执行总结 update执行流程 1.执行语句连接数据库 2.分析器通过词法、语法分析知道这是一条更新语句 3.优化器确定执行路径 4.执行器具体执行,找到这一行,更新数据,然后通过Inodb存储具体更新操作
MySQL架构设计 下面是一张MySQL的架构图: ?...负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。...SQL语句执行流程 连接 客户端发来一条SQL语句,监听客户端的‘连接管理模块’接收请求 将请求转发到‘连接进/线程模块’ 调用‘用户模块’来进行授权检查 通过检查后,‘连接进/线程模块’从‘线程连接池...‘命令解析器’,经过词法分析,语法分析后生成解析树 接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树 再转交给对应的模块处理 如果是查询还会经由‘查询优化器’做大量的优化,生成执行计划...meta数据,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理 上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中 结果 SQL执行完成后,将结果集返回给‘连接进/
前言 在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗?...底层的执行流程吗?...今天陈某来大家聊一聊这条 sql 语句是如何执行的以及有什么参数会影响执行的流程。...这个执行流程的示意图如下,我把它称为rowid排序。 ? 对比全字段排序,rowid排序多了一次回表查询,即是多了第7步的查询主键索引树。...(city, name, age); 此时执行流程图如下: ?
查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。 ...优化器: 按照 MySQL 认为最优的方案去执行。 执行器: 执行语句,然后从存储引擎返回数据。 ...连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。...完成这 2 步之后,MySQL 就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。 ...5) 执行器 当选择了执行方案后,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果
如果你只了解到sql是如何优化的,那么你应该通过本文了解一下Mysql的体系结构以及sql语句的执行流程。...接下来,通过一条sql语句的执行来深入了解MySQL各个组件功能以及其作用。...SQL语句的执行流程 1、连接MySQL 通常我们会编写sql语句通过某个客户端来执行并且接受执行结果,比如命令行、JDBC、navicat。...总结 至此,一条查询语句的执行流程已经非常清晰了,同时也认识了MySQL的整个体系结构以及各组件的作用。最后用一张图来收尾本文的核心内容并做总结。...一条查询SQL语句的执行流程: 客户端通过连接器连接MySQL服务。 连接成功后向SQL接口发送SQL语句请求。 SQL接口接收到SQL查询语句会先去缓存查询,如果命中返回给客户端,否则交给解析器。
这篇笔记主要记录MySQL的基础架构,一条查询语句是如何执行的。...比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条语句执行流程之前,我们看看MySQL的基础架构。...执行语句的时候,mysql首先是去查询缓存,之前有没有执行过这样的语句,mysql会将之前执行过的语句和结果以key-value的形式存储起来(当然有一定的存储和实效时间)。...缓存的工作流程是 服务器接收SQL,以SQL和一些其他条件为key查找缓存表 如果找到了缓存,则直接返回缓存 如果没有找到缓存,则执行SQL查询,包括原来的SQL解析,优化等。...总结 MySQL得到sql语句后,大概流程如下: 0.连接器负责和客户端进行通信 1.查询缓存:首先查询缓存看是否存在k-v缓存 2.解析器:负责解析和转发sql 3.预处理器:对解析后的sql树进行验证
我是黄啊码,鉴于大家对于学习的热情,从今天起,将连载mysql的相关知识,需要学习的可以注意我的更新学习,后期估计会开启付费专栏,但当前完全可以白嫖,希望大家珍惜!...我们再来看另外一张图,以下是SQL语句的执行流程:图片简而言之就是一句话:SQL 语句→缓存查询→解析器→优化器→执行器。...解析器:相当于咱们英语中的翻译,具体有:语法分析、语义分析,毕竟我们写的东西机器是不懂的,得它们自己翻译成自己懂的东西。优化器:选择最优的执行方案,从而提高执行效率,比如索引之类的。...执行器:字面意思就是执行我们所写的sql语句,当然前提是你当前用户具备了执行的权限。...而在存储引擎方面,MySQL则有自己独到的存储引擎,常见的、常用的有InnoDB和MyISAM,下面我具体列举一下:InnoDB 存储引擎:它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务
前言 SpringMVC搭建Spring框架进行项目开发,在之前是相对比较流行的一个组合,在使用过程中,对于SpringMVC的一个流程,许多使用者可能都比较模糊,本文就对SpringMVC的执行流程做一个简单的介绍...SpringMVC执行流程 1、前端控制器(DispatchServlet)接收到客户端发送的请求 2、收到请求后它会转发给处理器映射器(HandlerMapping),请求获取Handler。...4、前端控制器请求返回的处理器对象转发给处理器适配器(HandlerAdapter) 5、处理器适配器通过适配处理调用具体的处理器(Handler)既执行实际的后端逻辑处理代码,生成结果。 ...6、处理器适配器将Handler执行的结果ModelAndView返回给前端控制器 7、前端控制器将返回的ModelAndView转发给ViewResolver解析成View,并将View对象返回给前端控制器...写在最后 本篇文章就SpringMVC执行流程以及SpringMVC和Spring之间的关系进行了一个简单的介绍,后续文章会深入介绍其中的细节。
,但是update语句相比select语句还是有很大不同的,更新流程设计两个重要的日志模块: redo log:重做日志 binlog:归档日志 redo log 什么是redo log?...之间的位置就是可以追加记录的空闲空间 假设擦除的慢(checkpoint移动的慢),写入快(write pos移动的快),如果write pos追上了checkpoint,此时数据库将不能执行新的更新,...redo log buffer就是用来存储redo日志的。 真正的将日志写入到redo log文件(ib_logfile+数字)是在执行commit语句的时候执行。...MySQL最初自带的引擎是MyISAM,MyISAM只适合归档,不具备crash-safe的能力 InndoDB是后来另一个公司以插件的形式引入到MySQL,为了解决binlog的无crash-safe...UPDATE语句的执行流程 update test set score = 3 where id = 2; 整个update语句中牵涉到写redo log和binlog,并且redo log在前,binlog
key 是查询的语句,value 是查询的结果。 MySQL 收到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。...一条更新SQL的执行流程 更新SQL执行流程,在Server层和查询SQL差不多,也会经过连接、查询缓存、分析、优化、执行的过程。...假设t_user表的存储引擎为InnoDB,一条更新SQL的执行过程如下: 【执行事务阶段】 1、客户端向MySQL发送执行 update t_user set name='小王' where id=1...6、执行器查询到记录后,把name的值改为“小王”,调InnoDB的接口把新值写入Buffer Pool中的data page,这里注意下,MySQL执行增删改查,都是直接操作 Buffer Pool,...转载请注明出处——胡玉洋 《根据一条Sql来分析MySQL执行的全流程(连接、分析、优化、执行、Undo Log、Binlog、Redo Log)》
该执行过程封装在 TaskRunner#run() 中,搞懂该函数就搞懂了 task 是如何执行的,按照本博客惯例,这里必定要来一张该函数的核心实现: ?...需要注意的是,上图的流程都是在 Executor 的线程池中的某条线程中执行的。上图中最复杂和关键的是 task.run(...)...T]): Long,即计算该 partition 对应的迭代器的数据条数 对于 RDD#take(num: Int): Array[T] 的 ResultTask 这里的 func 真正执行的是 (it...的迭代器执行在 RDD action 中预定义好的操作,具体的操作根据不同的 action 不同而不同。...read 读取,其核心流程如下: ?
核心流程介绍 我们都知道 MyBatis 是对 JDBC 的封装,不管怎样,JDBC 的那一套还是不会变的,只是做了抽象、封装、归类等;所以我们顺着 JDBC 的思路来说下MyBatis的执行流程,JDBC...执行六部走 注册驱动 获取Connection连接 执行预编译 执行SQL 封装结果集 释放资源 然后通过这张图来分析下MyBatis的是怎样来封装这个过程的: MyBatis执行八步走 上面中流程就是...MyBatis 内部核心流程,咱么来一步步解释下 读取 MyBatis 的核心配置文件。...这样一对比,就可以看出了其实 Mybatis 的执行流程和 JDBC 其实大同小异 如果用代码表示如下∶ // 1.加载配置文件 InputStream inputStream= Resources.getResourceAsStream...List users = mapper.selectUserList(); 小结 这节主要通过对 JDBC 执行步骤的分析来对比分析 MyBatis 的执行的流程,总体上来看它们的执行步骤基本是一样的
执行Command就可以发起一次对依赖服务的调用 要执行Command,需要在4个方法中选择其中的一个 前两种是HystrixCommand独有的哦 2.1 execute() /**...* 不会抛出异常,而只是切换为同步执行,因此无需更改代码即可 将command从运行在单独的线程切换到调用线程....) * * @return {@code Future }执行 #run() 的结果,或者如果command由于任何原因失败,则返回 #getFallback() 的结果....command,而是直接执行fallback降级 5 检查线程池/队列/semaphore是否已满 如果command对应的线程池/队列/semaphore已满,那么也不会执行command,而是直接去调用...TimeoutException 如果timeout了,也会去执行fallback降级机制,而且就不会管run()或construct()返回的值 我们是不可能终止掉一个调用严重延迟的依赖服务的线程的
SpringMVC执行流程 用户发出请求 核心前端控制器根据请求的url找处理器映射器 处理器映射器根据地址寻找带有@RequestMapping注解的方法。进行对比。...找到返回 核心前端控制器根据找到的方法调用处理器适配器去执行方法 获取执行结果 核心前端控制器根据返回结果,找视图解析器寻找物理视图,封装页面到View对象中 核心前端控制器根据从视图对象中取出数据,响应给浏览器
SpringMVC常用组件 DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 HandlerMapping...initRequestToViewNameTranslator(context); initViewResolvers(context); initFlashMapManager(context); } SpringMVC的执行流程...如果有配置,则访问目标资源(一般为静态资源,如:JS,CSS,HTML),找不到客户端也会展示404错误 b) 存在则执行下面的流程 3) 根据该URI,调用HandlerMapping获得该Handler...配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain执行链对象的形式返回。...8) 此时将开始执行拦截器的postHandle(...)方法【逆向】。
领取专属 10元无门槛券
手把手带您无忧上云