查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。...分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。...第二步,语法分析,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法。 优化器: 按照 MySQL 认为最优的方案去执行。 执行器: 执行语句,然后从存储引擎返回数据。...,然后调用数据库引擎,返回执行结果 更新(包括删除、新增)语句的执行: 执行更新语句时会就日志:归档日志和重做日志, 1、先查询数据 2、然后将查出的数据修改,调用引擎API接口写入这一行数据,InnoDB...SQL 等执行过程分为两类, 一类对于查询等过程如下:权限校验—-》查询缓存—-》分析器—-》优化器—-》权限校验—-》执行器—-》引擎 对于更新等语句执行流程如下:分析器——》权限校验——》6267
开发人员基本都知道,我们的数据存在数据库中(目前最多的是MySQL和Oracle,由于作者更擅长MySQL,所以这里默认数据库为MySQL),服务器通过sql语句将查询数据的请求传入到MySQL数据库。...数据库拿到sql语句以后。都是进行了哪些操作呢?这里向大家介绍下我的个人的理解,欢迎大家评论区批评指正。...流程概述 MySQL得到sql语句后,大概流程如下: 1.sql的解析器:负责解析和转发sql 2.预处理器:对解析后的sql树进行验证 3.查询优化器:得到一个执行计划 4.查询执行引擎...sql的解析器与预处理 sql解析器是在命令分发之后,将对应的sql语句,解析为sql解析树。sql解析树是MySQL本身内部的语法规则和解析查询。...MySQL没有rbo优化器) 这些规则是硬编码在数据库的代码中的。rbo会根据输入的sql语句可以匹配到的优先级最高的规则去作为执行计划。例如:在rbo中有这么一条规则:有索引的情况下,使用索引。
如果该sql之前执行过,会以key-value的形式存储在查询缓存中,key为查询sql语句,value为语句执行的结果。...从分析器开始真正的进入sql语句执行的第一步,解析sql语句。...select查询相关的语句的执行比较容易理解,主要理解了上述mysql的执行模块就可以理解select语句是如何执行的。...更新语句的执行,除了mysql的执行模块外还有2个重要的日志模块(redo log、binlog),可以通过日志模块将mysql的数据恢复到近期任意一秒的状态。...binlog写入成功,redo log写入时出现异常导致mysql重启。重启后mysql的由于redo log日志缺失这条更新sql,所以此时的数据库的值已经是错误的了。
前言: 很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句的执行过程是怎样的,如果不了解执行过程的话,就很难进行sql语句的优化处理,也很难设计出来优良的数据库表结构。...这篇文章主要是讲解一下sql语句的执行过程。 sql语句的执行过程: 客户端、连接器、分析器、优化器、执行器、存储引擎几个阶段。 连接器的作用:管理链接、权限验证的处理。...连接器: 执行sql语句的时候,第一步需要进行数据库的连接处理,连接器负责客户端建立连接、获取权限、维持和管理连接。...查询缓存: 连接建立完毕之后,进行查询缓存的处理,执行sql语句会先到缓存中看看是不是刚刚执行了这条语句,之前执行过的语句及其结果就会以key-value对的形式直接存储在内存中的,key是查询的语句,...然后进行语法分析的处理,根据词法分析,根据词法分析的结果,语句分析器就会根据语法规则判断输入的这个sql语句是否满足mysql的语法。
【重学 MySQL】四十、SQL 语句执行过程 select 语句的完整结构 SELECT 语句是 SQL(Structured Query Language)中用于从数据库表中检索数据的核心语句...select 语句执行顺序 SELECT语句的执行顺序在SQL中是一个重要的概念,它决定了数据库如何处理和返回查询结果。尽管在编写SQL语句时,我们可能按照SELECT ... FROM ......ORDER BY ...这样的顺序来书写,但实际上,数据库在执行这些语句时遵循的是不同的内部逻辑顺序。以下是SELECT语句的完整执行顺序: FROM/JOIN: 这是SQL语句执行的第一步。...需要注意的是,虽然这个顺序描述了数据库内部处理SQL语句的方式,但在编写SQL语句时,我们仍然应该按照逻辑顺序来书写,即先指定数据源(FROM/JOIN),然后设置筛选条件(WHERE),接着进行分组和聚合...这样做有助于保持SQL语句的清晰和可读性。 SQL 语句执行原理 SELECT 是先执行 FROM 这一步的。
昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化。 ...SQL语句执行过程 查询缓存 MySQL查询缓存保存查询返回的完整结构。当查询命中该缓存时,MySQL会立刻返回结果,跳过了解析、优化和执行阶段。 ...当判断缓存是否命中时,MySQL不会进行解析查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息。所以,任何字符上的不同,例如空格、注解等都会导致缓存的不命中。 ...解析和预处理 解析器通过关键字将SQL语句进行解析,并生成对应的解析树。MySQL解析器将使用MySQL语法规则验证和解析查询。 ...如果在一条SQL语句执行的过程中将该语句对应的最终执行计划进行缓存,当相似的语句再次被输入服务器时,就可以直接使用已缓存的执行计划,从而跳过SQL语句生成执行计划的整个过程,进而可以提高语句的执行速度。
C端产品更新需同步到B端,2)B端订单需要同步到一套ERP系统;3)订单管理、财务结算、物流配置需要全部在erp中实现;为了提交开发效率,打算用最传统的方法:通过在被同步端按人工录入一次数据,记录一次执行...sql语句,即方便、快捷、实用而且还准确,同时也能监控是否有其它未知问题。...查看mysql日志状态,日志路径show variables like 'general_log%'开启日志记录:set GLOBAL general_log=on关闭日志记录set GLOBAL general_log...=off本人开发环境是5.7,其它版本暂未测试,是否有效请自行测试,详情可以参考mysql官网有关“通用查询日志”https://dev.mysql.com/doc/refman/8.0/en/query-log.html
查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。 ...分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。 ...优化器: 按照 MySQL 认为最优的方案去执行。 执行器: 执行语句,然后从存储引擎返回数据。 ...连接建立后,执行查询语句的时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 的形式缓存在内存中,Key 是查询预计,Value 是结果集。...3) 分析器 MySQL 没有命中缓存,那么就会进入分析器,分析器主要是用来分析 SQL 语句是来干嘛的,分析器也会分为几步: 第一步,词法分析,一条 SQL
简单的 SQL 语句 mysql> select * from User where ID=10086; 上面是一条非常简单的 SQL 查询语句,咋一看是不是觉得很简单,但却不懂它内部的执行流程?...根据自己的理解,我画了个不那么专业的执行流程图,先给出这条 SQL 语句的执行流程,再逐步解析每个流程,执行流程图如下: ?...SQL语句执行流程图 你可以清晰地看到,MySQL 其实分为两层,server 层和存储引擎层。...连接器 这条语句执行的第一步就是连接数据库,这时会调用连接器干这个事情。他负责跟客户端建立连接、获取权限、维持和管理连接。 连接命令一般是这么写的,相信不用我过多解释。...对于经常更新的数据库来说,查询缓存根本没必要存在。除非你的表数据是不常变动的,建议你使用查询缓存。 分析器 如果没命中缓存就要开始执行语句了,但在执行之前 MySQL 需要知道你想干嘛。
MySQL的SQL语句执行流程详解 MySQL作为一种广泛使用的开源关系型数据库管理系统,其SQL语句的执行流程对于理解数据库性能优化、错误排查以及数据库设计都至关重要。...MySQL体系结构 在探讨SQL语句执行流程之前,我们先简要了解一下MySQL的体系结构。MySQL的体系结构大致可以分为三个层次:连接层、服务器层和存储引擎层。...,提高连接效率 服务器层 SQLInterface (SQL接口) 接受客户端的SQL语句,如DML、DDL、存储过程、视图、触发器等 服务器层 Parser (解析器) 解析、验证和优化SQL语句,生成语法树和执行计划...SQL语句执行流程 MySQL流程解析: 客户端请求: 客户端(如应用程序、用户终端等)向MySQL服务器发送请求查询数据的请求。...解析器处理: MySQL服务器将SQL查询语句传递给解析器。 解析器对SQL查询语句进行词法和语法分析,确保其符合MySQL的语法规则。 解析后的结果传递给预处理器。
数据库常用操作 操作 语句 创建数据库 create database if not exists 数据库名; 查看所有数据库 show databases; 切换数据库 use 数据库名; 删除数据库...drop database if exists 数据库名; 修改数据库编码 alter database 数据库名 character set utf8; 表结构常用操作 操作 语句 创建表 create...table if not exists 表名(字段名 数据类型, 字段名 数据类型, ...); 查看当前数据库所有表 show tables; 查看表结构 desc 表名; 查看指定表的创建语句 show...值1); 数据修改 update 表名 set 字段名=值, ... , 字段名=值 where 条件 删除表中数据 delete from 表名 where 条件 删除表 truncate 表名 MYSQL...约束 操作 语句 主键 primary key 删除主键约束 alter table 表名 drop primary key; 自增长 auto_increment 非空 not null 创建表前指定
01 SQL SQL,脚本查询语言,处理代码的顺序不是按照脚本语言的顺序,这点是不同于其他编程语言的最明显特征。...SQL语言常见的比如,Mysql,HiveQL,Oracle等,虽然语法上存在一些差异,但它们在解释查询脚本上,尤其是在解析语句执行顺序上具有共性。...如果将脚本语言分解为一系列的语句,那么这些语句的先后执行顺序是怎样的呢? 这篇文章,主要总结SQL语句的执行顺序。...02 Select语句执行顺序 select查询语句的执行顺序,可以看出首先执行FROM子句,最后执行ORDER BY 执行顺序: (1) FROM (2) ON (3) JOIN (4) WHERE...FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,选择相对小的表做基础表。 ON:对VT1应用ON筛选器,只有那些使为真才被插入到VT2。
接下来,通过一条sql语句的执行来深入了解MySQL各个组件功能以及其作用。...一、SQL语句的执行流程 1、连接MySQL 通常我们会编写sql语句通过某个客户端来执行并且接受执行结果,比如命令行、JDBC、navicat。...一条查询SQL语句的执行流程: 客户端通过连接器连接MySQL服务。 连接成功后向SQL接口发送SQL语句请求。...进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。...sql 语句如下: update tb_student A set A.age='19' where A.name=' 张三 '; 我们来给张三修改下年龄,在实际数据库肯定不会设置年龄这个字段的,不然要被技术负责人打的
MYSQL8版本直接将查询缓存的整块功能删掉了。 第三步:分析器 分析器首先会做“词法分析”,MYSQL会识别出SQL语句里面的字符串是什么以及代表什么。...接下来就是“语法分析器”,分析SQL的语法问题。 第四步:优化器 优化器会对SQL的执行顺序,使用哪个索引进行优化。确定SQL的执行方案。...第五步:执行器 执行器执行SQL语句会对权限进行校验,如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。...图片 一条update语句执行流程 update语句除了会执行上面的五步,还会涉及两个重要的日志模块。...有了redo log ,InnoDB可以保证数据库发生异常重启的时候,之前提交的记录不会丢失,这个能力为crash-safe。
请认真看完此文章,对你的sql一定会有很大的提升! ql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。...一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum...二、mysql的执行顺序 SELECT语句定义 一个完成的SELECT语句包含可选的几个子句。...就跳过 对比了一下,mysql和sql执行顺序基本是一样的, 标准顺序的 SQL 语句为: select 考生姓名, max(总成绩) as max总成绩 from tb_Grade where...考生姓名 is not null group by 考生姓名 having max(总成绩) > 600 order by max总成绩 在上面的示例中 SQL 语句的执行顺序如下:
SQL的使用,主要有以下两个模块: 1、数据库配置 ? 2、case管理与执行 ? 数据库管理这一块,无外乎简单的增删改查,主要是为了保存数据库信息,在此不做过多展开。 ?...case结构比较简单,主要是两块: 1、sql的基础信息,包含所用数据库、case名称、sql语句及备注信息 2、需要保存的变量、返回结果。...语句,只做执行使用 */ private String sql; private String description; /** * 数据库类型 * 1:...(包含要执行的sql语句),然后通过databaseType字段值判断是mysql数据库还是oracle数据库。..."; }else { return "执行失败,请检查sql语句"; }
查询各阶段执行进度 (1)开启收集与统计汇总执行阶段信息的功能 update performance_schema.setup_instruments set enabled='yes', timed...stage/%'; update performance_schema.setup_consumers set enabled='yes' where name like '%stage%'; (2)确定执行的...SQL所属的thread_id select sys.ps_thread_id(connection_id()); (3)查询各阶段的执行进度 -- 当前 SELECT stmt.SQL_TEXT...AS sql_text, stage.EVENT_NAME, CONCAT(WORK_COMPLETED, '/', WORK_ESTIMATED) AS progress, (stage.TIMER_END...查询SQL语句的整体执行进度 SELECT * FROM sys.session WHERE THREAD_ID = CONNECTION_ID() AND command = 'Query' AND
MySQL性能优化-查看执行慢的SQL语句 查看执行慢的SQL语句,需要先开启慢查询日志 默认情况下,MySQL数据库没有开启慢查询日志 慢日志常用配置项 #是否启用慢查询日志 slow_query_log...= ON #指定慢查询日志文件位置及名称 slow_query_log_file = /var/lib/mysql/my-slow.log #慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s...slow_query_log%'; 查看long_query_time阈值 show variables like '%long_query_time%'; 修改配置文件配置慢日志 #使用vi编辑器编辑mysql...etc/my.cnf #设置以下配置项: #是否启用慢查询日志 slow_query_log = ON #指定慢查询日志文件位置及名称 slow_query_log_file = /var/lib/mysql.../my-slow.log #慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s long_query_time = 10 #日志文件中的显示时区 log_timestamps = SYSTEM
mysql> select * from T where ID=10; 开门见山,当我们输入一条 SQL 语句的时候,MySQL 内部究竟执行了什么?...接下来我们来说明上文的 SQL 语句到底在内部经历了什么。 连接器 第一步,客户端会先连接到数据库,这个时候就是连接器来接待。它负责跟客户端建立连接、获取权限、维持和管理连接。...MySQL 拿到一个查询语句,会先查询缓存,先校验这个语句是否执行过,以 key-value 的形式存在内存里, Key 是查询预计,Value 是结果集。...分析器 如果没有命中缓存,那么就进入分析器,主要就是分析 SQL 语句是拿来干嘛,也就是解析该语句生成语法树,会分为两步: 第一步:词法分析, 一条 SQL 语句有多个字符串组成,首先要提取关键字,比如...第二步:语法分析,主要就是判断你输入的 SQL 是否正确,是否符合 MySQL 的语法。,主要就是判断你输入的 SQL 是否正确,是否符合 MySQL 的语法。