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

MySQLsql执行顺序

SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后产生虚拟表会作为执行最终结果返回。下面的是常用关键字执行顺序: ?...)未匹配行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3; 4、WHERE:对虚拟表VT3进行WHERE条件过滤,只有符合记录才会被放入到虚拟表VT4; 5、...:对虚拟表VT6进行HAVING条件过滤,只有符合记录才会被插入到虚拟表VT7中; 8、SELECT:执行SELECT操作,选择指定列,插入到虚拟表VT8中; 9...、DISTINCT:对虚拟表VT8中记录进行去重,产生虚拟表VT9; 10、ORDER BY:将虚拟表VT9中记录按照进行排序操作,产生虚拟表VT10; 11、LIMIT...:取出指定行记录,产生虚拟表VT11,并将结果返回。

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

MySQL执行sql语句机制

目录 1 概念 2 执行过程 1 概念 连接器: 身份认证和权限相关(登录 MySQL 时候)。...查询缓存: 执行查询语句时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。...分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你 SQL 语句要干嘛,再检查你 SQL 语句语法是否正确。...第二步,语法分析,主要就是判断你输入 sql 是否正确,是否符合 MySQL 语法。 优化器: 按照 MySQL 认为最优方案去执行执行器: 执行语句,然后从存储引擎返回数据。...2 执行过程 查询语句执行: 1、鉴权 2、查询缓存 3、分析sql,提取关键字select 、表名、列字段、查询条件,然后判断语法 4、优化执行方案,自己优化算法不一定是最优 5、再次权限校验

3.8K30

Mysql-SQL执行顺序

SQL执行顺序事实上,sql并不是按照我们书写顺序来从前往后、左往右依次执行,它是按照固定顺序解析,主要作用就是从上一个阶段执行返回结果来提供给下一阶段使用,sql执行过程中会有不同临时中间表...,这也是sql执行第一步:表示要从数据库中执行哪张表。...通过from 和 join on 选择出需要执行数据库表T和S,产生笛卡尔积,生成T和S合并临时中间表Temp1。...distinct对所有的数据进行去重,此时如果有min、max函数会执行字段函数计算,然后产生临时表Temp7 实例说明:此阶段对temp5中数据进行去重,引擎API会调用去重函数进行数据过滤...实例说明:在temp7中排好序数据,然后取前五条插入到Temp9这个临时表中,最终返回给客户端ps:实际上这个过程也并不是绝对这样,中间mysql会有部分优化以达到最佳优化效果,比如在select

19610

MySQL 8.0 SQL 执行流程

MySQL 8.0 SQL 执行流程首先我们先来看下 MySQL 经典架构图,8.0 没怎么翻到,先看看这个了。...Optimzer优化器,将 SQL 进行优化生成多个执行计划。执行器上面优化器生成了多份执行计划后,接下来就由执行器选择一份计划执行了。...执行器先会判断当前是否具有权限,然后才会去执行相应 SQL 语句。Caches缓存命中,8.0 中已经被干掉了。...比如他是将 SQL 语句作为 key 进行命中匹配,如果 SQL 中多加了一个空格也会被认为不是同一条 SQL 导致匹配不到。Pluggable storage Engines数据库执行引擎插件。...文件系统这个是存放 MySQL 文件系统。SQL 执行流程SQL 流程是 SQL --> 解析器 --> 优化器 --> 执行器 --> 返回结果。下面会将各个组件单独拉出来做分析。

13240

MySQL EXPLAIN SQL 输出信息描述

EXPLAIN语句能够被用于获取一些关于SQL执行相关信息,比如表连接顺序,对表方式方式等等。...一、EXPLAIN概述 EXPLAIN 语句主要是用于解析SQL执行计划,通过分析执行计划采取适当优化方式提高SQL运行效率。...EXPLAIN 语句输出通常包括id列,select_type,table,type,possible_keys,key等等列信息 MySQL 5.6.3后支持SELECT, DELETE, INSERT...EXPLAIN EXTENDED支持一些额外执行计划相关信息 EXPLAIN PARTITIONS支持基于分区表查询执行计划相关信息 二、EXPLAIN输出列描述 -- 下面通过示例来展示EXPLAIN...,即原来1=1条件被去掉 -- 对于复杂SQL语句我们可以通过该方式获得一个比较清晰真正被执行SQL语句 四、EXPLAIN PARTITIONS示例 (root@localhost) [sakila

99420

MySQL- SQL执行计划 & 统计SQL执行每阶段耗时

---- 某些SQL查询为什么慢 要弄清楚这个问题,需要知道MySQL处理SQL请求过程, 我们来看下 MySQL处理SQL请求过程 客户端将SQL请求发送给服务器 服务器检查是否在缓存中是否命中该...SQL,未命中的话进入下一步 服务器进行SQL解析、预处理,再由优化器生成对应执行计划 根据执行计划来,调用存储引擎API来查询数据 将结果返回给客户端 ---- 查询缓存对SQL性能影响 query_cache_type...---- 造成MySQL生成错误执行计划原因 存储引擎提供统计信息不准确 执行计划中估算不等同于实际执行计划成本 MySQL不考虑并发查询 MySQL有时候会基于一些特定规则来生成执行计划...> show profiles; # 每条SQL执行汇总信息 +----------+------------+-----------------------+ | Query_ID | Duration...OFF设置 performance_schema可以记录数据库所有线程执行SQL, 而上面的profile是session级别的,仅能记录当前session

2.5K20

MySqlsql语句执行过程详述

前言: 很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句执行过程是怎样,如果不了解执行过程的话,就很难进行sql语句优化处理,也很难设计出来优良数据库表结构。...这篇文章主要是讲解一下sql语句执行过程。 sql语句执行过程: 客户端、连接器、分析器、优化器、执行器、存储引擎几个阶段。 连接器作用:管理链接、权限验证处理。...查询缓存: 连接建立完毕之后,进行查询缓存处理,执行sql语句会先到缓存中看看是不是刚刚执行了这条语句,之前执行语句及其结果就会以key-value对形式直接存储在内存中,key是查询语句,...分析器: 分析器首先会进行词法分析,输入是由多个字符串和空格组成一条sql语句,mysql需要识别出来里面的字符串分别是什么,代表什么意思。...然后进行语法分析处理,根据词法分析,根据词法分析结果,语句分析器就会根据语法规则判断输入这个sql语句是否满足mysql语法。

23440

MySQL查看实时执行SQL语句

MySQL默认不能实时查看执行SQL语句,因为这会消耗一定资源。 要开启这个功能,稍微配置一下,打开这个LOG记录就可以了。 1 查看LOG功能 首先,查看是否已经开启实时SQL语句记录。...语句功能,并指定自定义log路径: mysql> SET GLOBAL general_log = 'ON'; mysql> SET GLOBAL general_log_file = '/var/...2.2 永久开启 永久有效需要配置my.cnf文件,加入下面两行: general_log = 1 general_log_file = /var/log/mysql/general_sql.log 重启...3 实时查看 过一小段时间后,就可以导出查看/var/lib/mysql/sql_statement.log文件了,里面记录了所有执行SQL语句。...如果要实时查看该文件改动,在Linux系统用tail命令: $ tail -f /var/lib/mysql/general_sql.log 另外,也可以用BareTail软件实时查看。

5K20

Mysql资料 查询SQL执行顺序

具体顺序 1.FROM 执行笛卡尔积 FROM 才是 SQL 语句执行第一步,并非 SELECT 。对FROM子句中前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源数据集。...FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最后表(基础表 driving table)将被最先处理,即最后表为驱动表,当FROM 子句中包含多个表情况下,我们需要选择数据最少表作为基础表...同时,从这一步开始,后面的语句中都可以使用SELECT中别名。 6.AGG_FUNC 计算聚合函数 计算 max 等聚合函数。SQL Aggregate 函数计算从列中取得值,返回一个单一值。...HAVING 语句在SQL主要作用与WHERE语句作用是相同,但是HAVING是过滤聚合值,在 SQL 中增加 HAVING 子句原因就是,WHERE 关键字无法与聚合函数一起使用,HAVING子句主要和...同时,ORDER BY子句执行顺序为从左到右排序,是非常消耗资源。 12.LIMIT/OFFSET 指定返回行 从VC10开始处选择指定数量行,生成虚拟表 VT11,并返回调用者。

3.2K00

MySQL执行SQL语句过程详解

开发人员基本都知道,我们数据存在数据库中(目前最多MySQL和Oracle,由于作者更擅长MySQL,所以这里默认数据库为MySQL),服务器通过sql语句将查询数据请求传入到MySQL数据库。...流程概述   MySQL得到sql语句后,大概流程如下:   1.sql解析器:负责解析和转发sql   2.预处理器:对解析后sql树进行验证   3.查询优化器:得到一个执行计划   4.查询执行引擎...2.结果输出时候,需要额外进行数据缓存操作。   3.写入数据时,MySQL会将对应表所有缓存都设置为失效。当缓存内存较大时候,会导致系统消耗较大。...sql解析器与预处理   sql解析器是在命令分发之后,将对应sql语句,解析为sql解析树。sql解析树是MySQL本身内部语法规则和解析查询。...+返回数据给客户端   得到执行计划后,根据已有的执行计划,查询执行引擎,MySQLSQL Layer层,调用Storage Engine Layer层接口,从MySQL存储引擎中获取到相对应结果集

3.5K20

MySQL架构与SQL执行流程

MySQL架构设计 下面是一张MySQL架构图: ?...包括线程创建,线程 cache 等 SQL Interface:SQL接口 接受用户SQL命令,并且返回用户需要查询结果。...SQL语句执行流程 连接 客户端发来一条SQL语句,监听客户端‘连接管理模块’接收请求 将请求转发到‘连接进/线程模块’ 调用‘用户模块’来进行授权检查 通过检查后,‘连接进/线程模块’从‘线程连接池...‘命令解析器’,经过词法分析,语法分析后生成解析树 接下来是预处理阶段,处理解析器无法解决语义,检查权限等,生成新解析树 再转交给对应模块处理 如果是查询还会经由‘查询优化器’做大量优化,生成执行计划...meta数据,获取表存储引擎类型等信息,通过接口调用对应存储引擎处理 上述过程中产生数据变化时候,若打开日志功能,则会记录到相应二进制日志文件中 结果 SQL执行完成后,将结果集返回给‘连接进/

1.6K30

Mysqlsql执行如此慢

我们发现sql语句很长时间都不见返回响应,我们先看一下他状态,发现果然是被锁住了. ? 此类问题我们直接可以找到谁持有MDL写锁,直接kill....可以用查询sys.schema_table_lock_waits这张表,我们就可以直接找到阻塞process id ,把这个连接用kill命令断开即可(mysql启动时候设置performation_schema...等待行锁 首先,我们看看下面sql语句 mysql> select * from t where id=1 lock in share mode; 要执行上面语句时候,这个记录就会要加读锁,如果这个时候已经有一个事物在这行记录上持有一个写锁...这个问题并并不难分析,问题是如何查出谁占着这个写锁,如果你用mysql5.7,可以使用下面语句 mysql> select * from t sys.innodb_lock_waits where...按照上面操作我们再看看对应慢查询日志 ? ? 我们发现lock in share mode加锁操作居然时间比没有加锁查询块了,超出了我们预期,我们再看看每个sql查询结果 ?

1.6K30

Sql语句在Mysql执行流程

分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你 SQL 语句要干嘛,再检查你 SQL 语句语法是否正确。   ...优化器: 按照 MySQL 认为最优方案去执行。   执行器: 执行语句,然后从存储引擎返回数据。   ...连接建立后,执行查询语句时候,会先查询缓存,MySQL 会先校验这个 sql 是否执行过,以 Key-Value 形式缓存在内存中,Key 是查询预计,Value 是结果集。...3) 分析器             MySQL 没有命中缓存,那么就会进入分析器,分析器主要是用来分析 SQL 语句是来干嘛,分析器也会分为几步:             第一步,词法分析,一条 SQL...第二步,语法分析,主要就是判断你输入 sql 是否正确,是否符合 MySQL 语法。

4.6K10

django执行原生sql_mysql语句执行顺序

大家好,又见面了,我是你们朋友全栈君。...前言 Django在查询数据时,大多数查询都能使用ORM提供API方法,但对于一些复杂查询可能难以使用ORMAPI方法实现,因此Django引入了SQL语句执行方法,有以下三种执行方式 extra...raw:执行原始SQL并返回模型实例对象。...execute:直接执行自定义SQL 以上3种方式,这里只介绍raw方式,用最多,也最推荐使用 raw 只能实现数据查询操作,并且要依靠模型对象,在Pycharm里打开raw源码,如下图所示,它一共定义了...4个参数,每个参数如下: raw_query:SQL语句 params:如果raw_query设置字符串格式化%s,那么该参数为raw_query提供数值 translations:为查询字段设置别名

3.2K10
领券