首页
学习
活动
专区
工具
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

    27910

    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 --> 解析器 --> 优化器 --> 执行器 --> 返回结果。下面会将各个组件单独拉出来做分析。

    15640

    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.7K20

    MySqlsql语句执行过程详述

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

    27640

    浅析MySQLSQL执行过程

    本文主要围绕着下面这些问题展开,在阅读之前可以先思考一下问题答案是什么MySQL体系组成结构是什么样MySQLSQL执行流程是什么样?如何分析一条SQL执行时间?...MySQL8.0之后删除了查询缓存解析器:在解析器中对SQL语句进行语法分析、语义分析。优化器:在优化器中会确定SQL语句执行路径,比如是根据全表检索,还是根据索引来检索等。...执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行SQL查询并返回结果。在MySQL8.0以下版本,如果设置了查询缓存,这时会将查询结果进行缓存。...打开,即设置为1:shell 代码解读复制代码mysql> set profiling=1;然后我们执行一个SQL查询(你可以执行任何一个SQL查询):csharp 代码解读复制代码mysql> select...如果我们想要获取上一次查询执行时间,可以使用:mysql 代码解读复制代码mysql> show profile;查询指定Query ID,比如:sql 代码解读复制代码mysql> show profile

    12810

    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软件实时查看。

    5.1K20

    PHP终止脚本执行实例代码

    终止脚本执行,指的是通过一条语句告诉PHP引擎,此语句之后其他语句不需要执行。...PHP提供了三种方式来终止脚本执行:return,die,exit return:执行到该处退出,如果是在函数中,表示退出函数,如果是在脚本中,表示脚本停止执行 //return //return '*...'; //exit //exit; //直接停止,不需要输出任何提示信息 //exit('stop here') ; //带括号表示在此处终止,但是要输出提示信息 //dieexit是一样//die...; die('stop here') ; return:函数return是返回函数调用地方,脚本return是返回给脚本被包含地方。...php //终止脚本执行 echo 'start'; //return return '*'; 基于以上可能,所以PHP配置文件(项目配置文件:数据库连接信息等),采用以上方式 <?

    1.2K20

    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.3K00

    MySQL执行SQL语句过程详解

    开发人员基本都知道,我们数据存在数据库中(目前最多MySQL和Oracle,由于作者更擅长MySQL,所以这里默认数据库为MySQL),服务器通过sql语句将查询数据请求传入到MySQL数据库。...流程概述   MySQL得到sql语句后,大概流程如下:   1.sql解析器:负责解析和转发sql   2.预处理器:对解析后sql树进行验证   3.查询优化器:得到一个执行计划   4.查询执行引擎...sql解析器与预处理   sql解析器是在命令分发之后,将对应sql语句,解析为sql解析树。sql解析树是MySQL本身内部语法规则和解析查询。...rbo最大问题在于,通过固定规则来决定执行计划。并不会考虑sql中涉及对象数量和分布。有可能选出来规则不是最优执行计划。   ...+返回数据给客户端   得到执行计划后,根据已有的执行计划,查询执行引擎,MySQLSQL Layer层,调用Storage Engine Layer层接口,从MySQL存储引擎中获取到相对应结果集

    3.5K20

    Sql语句在Mysql执行流程

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

    4.7K10

    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.7K30

    MySQL架构与SQL执行流程

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

    1.6K30

    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

    用 Explain 命令分析 MySQL SQL 执行

    在上一篇文章《MySQL常见加锁场景分析》中,我们聊到行锁是加在索引上,但是复杂 SQL 往往包含多个条件,涉及多个索引,找出 SQL 执行时使用了哪些索引对分析加锁场景至关重要。...为此,我们需要使用 explain 来获取 MySQL 执行这条 SQL 执行计划。 什么是执行计划呢?...简单来说,就是 SQL 在数据库中执行表现情况,通常用于 SQL 性能分析、优化和加锁分析等场景,执行过程会在 MySQL 查询过程中由解析器,预处理器和查询优化器共同生成。...MySQL 查询过程 如果能搞清楚 MySQL 是如何优化和执行查询,不仅对优化查询一定会有帮助,还可以通过分析使用到索引来判断最终加锁场景。 下图是MySQL执行一个查询过程。...derived 是 SQL 中 from 子句中包含子查询被标记为该值,MySQL 会递归执行这些子查询,把结果放在临时表。下图展示了上述两种类型。

    1.5K00
    领券