精华内容
下载资源
问答
  • mysql执行过程顺序

    2020-03-10 21:21:23
    Mysql执行过程 首先经过连接器,Mysql同客户端建立连接。 查询缓存,如果命中直接返回,否则继续下一步。(由于缓存经常失效,在mysql8以后取消了缓存) 语句经过分析器,这个阶段将sql句解析成解析树 语句经过优化...

    Mysql执行过程

    1. 首先经过连接器,Mysql同客户端建立连接。
    2. 查询缓存,如果命中直接返回,否则继续下一步。(由于缓存经常失效,在mysql8以后取消了缓存)
    3. 语句经过分析器,这个阶段将sql句解析成解析树
    4. 语句经过优化器,sql语句进一步进行优化
    5. 语句进入执行器,执行引擎有myisam和innodb

    Mysql执行顺序

    1. from
    2. on
    3. join
    4. where
    5. group by
    6. 聚合函数
    7. select
    8. order by
    9. limit

    推荐阅读:mysql执行过程以及顺序

    展开全文
  • mysql执行过程

    2015-04-27 16:14:45
    这个一个mysql的开发存储过程,非常好的学习资料
  • MySQL执行过程以及顺序

    千次阅读 2019-10-10 14:26:09
    前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据中间件,MySQL承担者存储数据和读写数据的职责。因为学习和了解MySQL是至关重要的,那么当我们在客户端...一:MySQL执行过程 二:MySQL执行过程中的状态 三...

    前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据中间件,MySQL承担者存储数据和读写数据的职责。因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个sql到出现详细的查询数据,这其中究竟经历了什么样的过程?MySQL服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题:

    本篇博客的目录

    一:MySQL执行过程

    二:MySQL执行过程中的状态

    三:MySQL执行的顺序

    四:总结

    一:MySQL执行过程

    MySQL整体的执行过程如下图所示:

    在这里插入图片描述
    1.1:连接器

    连接器的主要职责就是:

    ①负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行,其中MySQL在与客户端连接TC/IP的

    ②验证请求用户的账户和密码是否正确,如果账户和密码错误,会报错:Access denied for user ‘root’@‘localhost’ (using password: YES)

    ③如果用户的账户和密码验证通过,会在MySQL自带的权限表中查询当前用户的权限:

    MySQL中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,MySQL权限表的验证过程为:

    1:User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例

    Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库

    Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表

    Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段

    Procs_priv表:存放存储过程和函数级别的权限

    2:先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。

    3:通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推

    4:如果在任何一个过程中权限验证不通过,都会报错

    1.2:缓存

    MySQL的缓存主要的作用是为了提升查询的效率,缓存以key和value的哈希表形式存储,key是具体的sql语句,value是结果的集合。如果无法命中缓存,就继续走到分析器的的一步,如果命中缓存就直接返回给客户端 。不过需要注意的是在MySQL的8.0版本以后,缓存被官方删除掉了。之所以删除掉,是因为查询缓存的失效非常频繁,如果在一个写多读少的环境中,缓存会频繁的新增和失效。对于某些更新压力大的数据库来说,查询缓存的命中率会非常低,MySQL为了维护缓存可能会出现一定的伸缩性的问题,目前在5.6的版本中已经默认关闭了,比较推荐的一种做法是将缓存放在客户端,性能大概会提升5倍左右

    1.3:分析器

    分析器的主要作用是将客户端发过来的sql语句进行分析,这将包括预处理与解析过程,在这个阶段会解析sql语句的语义,并进行关键词和非关键词进行提取、解析,并组成一个解析树。具体的关键词包括不限定于以下:select/update/delete/or/in/where/group by/having/count/limit等.如果分析到语法错误,会直接给客户端抛出异常:ERROR:You have an error in your SQL syntax.

    比如:select * from user where userId =1234;

    在分析器中就通过语义规则器将select from where这些关键词提取和匹配出来,MySQL会自动判断关键词和非关键词,将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在user表,同时假如User表中不存在userId这个字段同样会报错:unknown column in field list.

    1.4:优化器

    能够进入到优化器阶段表示sql是符合MySQL的标准语义规则的并且可以执行的,此阶段主要是进行sql语句的优化,会根据执行计划进行最优的选择,匹配合适的索引,选择最佳的执行方案。比如一个典型的例子是这样的:

    表T,对A、B、C列建立联合索引,在进行查询的时候,当sql查询到的结果是:select xx where B=x and A=x and C=x.很多人会以为是用不到索引的,但其实会用到,虽然索引必须符合最左原则才能使用,但是本质上,优化器会自动将这条sql优化为:where A=x and B=x and C=X,这种优化会为了底层能够匹配到索引,同时在这个阶段是自动按照执行计划进行预处理,MySQL会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器

    1.5:执行器

    在执行器的阶段,此时会调用存储引擎的API,API会调用存储引擎,主要有一下存储的引擎,不过常用的还是myisam和innodb:

    在这里插入图片描述

    引擎以前的名字叫做:表处理器(其实这个名字我觉得更能表达它存在的意义)负责对具体的数据文件进行操作,对sql的语义比如select或者update进行分析,执行具体的操作。在执行完以后会将具体的操作记录到binlog中,需要注意的一点是:select不会记录到binlog中,只有update/delete/insert才会记录到binlog中。而update会采用两阶段提交的方式,记录都redolog中

    二:执行的状态

    可以通过命令:show full processlist,展示所有的处理进程,主要包含了以下的状态,表示服务器处理客户端的状态,状态包含了从客户端发起请求到后台服务器处理的过程,包括加锁的过程、统计存储引擎的信息,排序数据、搜索中间表、发送数据等。囊括了所有的MySQL的所有状态,其中具体的含义如下图:

    在这里插入图片描述

    三:sql的执行顺序

    事实上,sql并不是按照我们的书写顺序来从前往后、左往右依次执行的,它是按照固定的顺序解析的,主要的作用就是从上一个阶段的执行返回结果来提供给下一阶段使用,sql在执行的过程中会有不同的临时中间表,一般是按照如下顺序:

    在这里插入图片描述
    例子: select distinct s.id from T t join S s on t.id=s.id where t.name=“Yrion” group by t.mobile having count(*)>2 order by s.create_time limit 5;

    3.1:from

    第一步就是选择出from关键词后面跟的表,这也是sql执行的第一步:表示要从数据库中执行哪张表。

    实例说明:在这个例子中就是首先从数据库中找到表T

    3.2:join on

    join是表示要关联的表,on是连接的条件。通过from和join on选择出需要执行的数据库表T和S,产生笛卡尔积,生成T和S合并的临时中间表Temp1。on:确定表的绑定关系,通过on产生临时中间表Temp2.

    实例说明:找到表S,生成临时中间表Temp1,然后找到表T的id和S的id相同的部分组成成表Temp2,Temp2里面包含着T和Sid相等的所有数据

    3.3:where

    where表示筛选,根据where后面的条件进行过滤,按照指定的字段的值(如果有and连接符会进行联合筛选)从临时中间表Temp2中筛选需要的数据,注意如果在此阶段找不到数据,会直接返回客户端,不会往下进行.这个过程会生成一个临时中间表Temp3。注意在where中不可以使用聚合函数,聚合函数主要是(min\max\count\sum等函数)

    实例说明:在temp2临时表集合中找到T表的name="Yrion"的数据,找到数据后会成临时中间表Temp3,temp3里包含name列为"Yrion"的所有表数据

    3.4:group by

    group by是进行分组,对where条件过滤后的临时表Temp3按照固定的字段进行分组,产生临时中间表Temp4,这个过程只是数据的顺序发生改变,而数据总量不会变化,表中的数据以组的形式存在

    实例说明:在temp3表数据中对mobile进行分组,查找出mobile一样的数据,然后放到一起,产生temp4临时表。

    3.5:Having

    对临时中间表Temp4进行聚合,这里可以为count等计数,然后产生中间表Temp5,在此阶段可以使用select中的别名

    实例说明:在temp4临时表中找出条数大于2的数据,如果小于2直接被舍弃掉,然后生成临时中间表temp5

    3.6:select

    对分组聚合完的表挑选出需要查询的数据,如果为*会解析为所有数据,此时会产生中间表Temp6

    实例说明:在此阶段就是对temp5临时聚合表中S表中的id进行筛选产生Temp6,此时temp6就只包含有s表的id列数据,并且name=“Yrion”,通过mobile分组数量大于2的数据

    3.7:Distinct

    distinct对所有的数据进行去重,此时如果有min、max函数会执行字段函数计算,然后产生临时表Temp7

    实例说明:此阶段对temp5中的数据进行去重,引擎API会调用去重函数进行数据的过滤,最终只保留id第一次出现的那条数据,然后产生临时中间表temp7

    3.8:order by

    会根据Temp7进行顺序排列或者逆序排列,然后插入临时中间表Temp8,这个过程比较耗费资源

    实例说明:这段会将所有temp7临时表中的数据按照创建时间(create_time)进行排序,这个过程也不会有列或者行损失

    3.9:limit

    limit对中间表Temp8进行分页,产生临时中间表Temp9,返回给客户端。

    实例说明:在temp7中排好序的数据,然后取前五条插入到Temp9这个临时表中,最终返回给客户端

    ps:实际上这个过程也并不是绝对这样的,中间MySQL会有部分的优化以达到最佳的优化效果,比如在select筛选出找到的数据集

    四:总结

    本篇博客总结了MySQL的执行过程,以及sql的执行顺序,理解这些有助于我们对sql语句进行优化,以及明白MySQL中的sql语句从写出来到最终执行的轨迹,有助于我们对sql有比较深入和细致的理解,提高我们的数据库理解能力。同时,对于复杂sql的执行过程、书写都会有一定程度的意义。

    展开全文
  • mysql执行顺序

    2018-03-28 18:55:15
    (1)from (2) on (3) ... (7)having (8) select (9) distinct (10) order by 从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这...

    (1)from 
    (2) on 

     (3) join 
    (4) where 
    (5)group by(开始使用select中的别名,后面的语句中都可以使用)
    (6) avg,sum.... 
    (7)having 
    (8) select 
    (9) distinct 
    (10) order by 

    从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。 
    第一步:首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表 vt1(选择相对小的表做基础表) 
    第二步:接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 
    第三步:如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3 
    第四步:如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3。 
    第五步:应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。举个简单的例子,有一个学生表(班级,姓名)和一个成绩表(姓名,成绩),我现在需要返回一个x班级的全体同学的成绩,但是这个班级有几个学生缺考,也就是说在成绩表中没有记录。为了得到我们预期的结果我们就需要在on子句指定学生和成绩表的关系(学生.姓名=成绩.姓名)那么我们是否发现在执行第二步的时候,对于没有参加考试的学生记录就不会出现在vt2中,因为他们被on的逻辑表达式过滤掉了,但是我们用left outer join就可以把左表(学生)中没有参加考试的学生找回来,因为我们想返回的是x班级的所有学生,如果在on中应用学生.班级='x'的话,left outer join会把x班级的所有学生记录找回,所以只能在where筛选器中应用学生.班级='x' 因为它的过滤是最终的。 
    第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。 
    第七步:应用cube或者rollup选项,为vt5生成超组,生成vt6. 
    第八步:应用having筛选器,生成vt7。having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。 
    第九步:处理select子句。将vt7中的在select中出现的列筛选出来。生成vt8. 
    第十步:应用distinct子句,vt8中移除相同的行,生成vt9。事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。 
    第十一步:应用order by子句。按照order_by_condition排序vt9,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。排序是很需要成本的,除非你必须要排序,否则最好不要指定order by,最后,在这一步中是第一个也是唯一一个可以使用select列表中别名的步骤。 
    第十二步:应用top选项。此时才返回结果给请求者即用户。 

    展开全文
  • MySql执行顺序

    千次阅读 2010-06-10 10:15:00
    标准的 SQL 的解析顺序为:(1).FROM 子句, 组装来自不同数据源的数据(2).WHERE 子句, 基于指定的条件对记录进行筛选(3).GROUP BY 子句, 将数据划分为多个分组(4).使用聚合函数进行计算(5).使用 HAVING 子句筛选分组(6...

    标准的 SQL 的解析顺序为:

     

    (1).FROM 子句, 组装来自不同数据源的数据
    (2).WHERE 子句, 基于指定的条件对记录进行筛选
    (3).GROUP BY 子句, 将数据划分为多个分组
    (4).使用聚合函数进行计算
    (5).使用 HAVING 子句筛选分组
    (6).计算所有的表达式
    (7).使用 ORDER BY 对结果集进行排序

     

    举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 “考生姓名”内容不为空的记录按照 “考生姓名” 分组, 并且筛选分组结果, 选出 “总成绩” 大于 600 分的.
    标准顺序的 SQL 语句为:
    select 考生姓名, max(总成绩) as max总成绩
    from tb_Grade
    where 考生姓名 is not null
    group by 考生姓名
    having max(总成绩) > 600
    order by max总成绩

    在上面的示例中 SQL 语句的执行顺序如下:
    (1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据
    (2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据
    (3). 执行 GROUP BY 子句, 把 tb_Grade 表按 “学生姓名” 列进行分组
    (4). 计算 max() 聚集函数, 按 “总成绩” 求出总成绩中最大的一些数值
    (5). 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.
    (7). 执行 ORDER BY 子句, 把最后的结果按 “Max 成绩” 进行排序. copyright 好易用

    总结: copyright 好易用

    select A
    from B
    where C
    group by D
    having E
    order by F

    顺序:
    查询将在B中按照C条件获取数据,并过滤出结果数据集的字段A,–>
    将得到的数据按照D进行分组。所以D必须是A中的某一个/多个字段–>
    对分组进行筛选。所以E也必须是A中的某一个/多个字段–>
    对筛选进行排序。所以E也必须是A中的某一个/多个字段 h

     

    WHERE的执行顺序,从左至右依次执行,通过前两个条件缩小第三个条件的WHERE范围,SUBSTRING传递进来的内容从第一位开始取表内符合条件的所有MOMsg长度

    SUBSTRING(字符串,取值的位置,取多少位)

     在WHERE条件内,先从左至右执行,依次满足条件,缩小SUBSTRING的范围,进行到SUBSTRING时,在已删选出的条件内,匹配所有的MOMsg.只要MOMsg位相等,就符合.模糊指令

    展开全文
  • MySql执行顺序及执行计划

    万次阅读 多人点赞 2019-03-06 12:41:12
    mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 2、JOINtable2 所以先是确定表,再确定关联条件 3、ONtable1....
  • MySQL 执行计划和MySQL执行过程

    千次阅读 2018-07-30 18:13:53
    MYSQL执行流程 客户端连接服务器。 查询缓存。不会直接查询数据库。会从缓存中查看是否存在相同语句的执行计划,如果存在将省略语法检查、语言检查、加锁、权限核对、SQL优化等过程。直接执行SQL语句。(以下为没...
  • 关于sql和MySQL的语句执行顺序(必看!!!)

    万次阅读 多人点赞 2016-03-29 12:15:09
    今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?...sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3) join (2) on (4) where...
  • mysql 执行顺序 SQL语句执行顺序分析

    千次阅读 2013-04-06 18:58:40
    mysql 执行顺序 SQL语句执行顺序分析 (2011-08-30 11:25:02) 转载▼ 标签: 杂谈 分类: 数据库  首先,SELECT语句的基本语法如下:   SELECT selection_lis
  • mysql执行顺序(转载)

    千次阅读 2018-04-15 02:41:16
    MySQL的语句执行顺序MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对...
  • mysql指令执行顺序

    2018-11-01 16:29:03
    mysql指令执行顺序 from on join where group by rollup/cube having select distinct order by 注:mysql执行一个指令的过程都是创建一个虚拟表的过程
  • MySQL SELECT执行顺序

    千次阅读 2017-08-16 15:36:01
    mysql select 执行顺序, select语句执行顺序, select 执行顺序, sql select执行顺序, mysql语句执行顺序 1、FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。 2、ON: 对虚表VT1进行ON过滤,只有那些符合...
  • 主要介绍了MySQL语句执行顺序和编写顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Mysql 语句执行顺序

    万次阅读 多人点赞 2016-04-26 21:51:48
    纸上得来终觉浅 1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西? 在开发中涉及到数据库,基本上只用到了sql语句,如何写sql...1)Mysql执行顺序,这个是写sql的核心,之前遇到的一些错误就是因为对其不了
  • MySQL数据据库中我们经常使用SQL SELECT语句来查询数据,那么关于它的执行顺序,下面小编来带大家简单了解一下
  • Mysql 语法执行顺序

    千次阅读 2020-07-08 10:30:24
    如果有去查阅一些文档或书籍,应该就知道sql在执行过程过其实并没有按照上诉的语法顺序执行的,它内部机制中会对语法进行解析,处理,优化 后生成查询计划,然后交给查询执行引擎 调用相应的存储引擎处理,如下: ...
  • mysql where执行顺序

    千次阅读 2018-04-02 11:02:23
    where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个。在用MySQL查询数据库的时候,连接了很多个过滤条件,发现非常慢...
  • sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,...
  • MySQL】 语法顺序执行顺序

    千次阅读 2018-12-14 10:18:54
    一、Mysql语法顺序(写sql的关键字顺序) select [distinct] from ...二、Mysql执行顺序(在数据库底层执行时sql按照下面的顺序进行执行) from on join where group by having select distinct u...
  • mysql语句执行顺序

    千次阅读 2018-04-29 17:42:56
    MySQL的语句执行顺序MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对...
  • MySql查询执行过程

    千次阅读 2016-12-06 01:37:25
    为什么要了解查询执行过程当希望MySql能够以更高的性能运行查询时,首先需要弄清楚MySql是如果执行查询的,很多查询优化工作实际上就是遵循一些原则让优化器能够按预想的合理方式运行MySql查询执行流程图:通过上图...
  • MySQL查询执行过程

    千次阅读 2017-03-07 19:47:39
    MySQL查询执行路径 1. 客户端发送一条查询给服务器; 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段; 3. 服务器端进行SQL解析、预处理,再由优化器生成...
  • MySQL执行查询的过程

    千次阅读 2018-09-19 13:22:17
    MySQL查询过程流程图1.客户端发送一条查询给服务器 2.服务器先检查查询缓存(见下面注释),如果命中了缓存,则立刻返回存储在缓存中的结果.否则,进入下一个阶段 3.服务器进行SQL解析.预处理,再由优化器生成对应的执行...
  • MySQL语句执行顺序和编写顺序

    千次阅读 多人点赞 2019-02-22 14:44:49
    执行顺序: from →join →on →where →group by→having→select→order by→limit (1)各个关键词的作用: from:需要从哪个数据表检索数据 join:联合多表查询返回记录时,并生成一张临时表 on:在生成...
  • 不知道大家在使用MySQL过程中,有没有认真思考或者留意过一个问题,MySQL执行顺序到底是如何执行的呢?或许很多人没有过多在意这个问题,甚至没有这方面的认知。 本猿就在这里整理一下: MySql语句的编写顺序...
  • mysql 强制执行顺序

    千次阅读 2017-06-21 12:22:35
    ... 遇到一个问题 ...这句sql 执行顺序没有按照预想的来 ...于是执行计划变成下面这样 ...查询会在2秒左右返回....mysql 执行计划有时候不按照我们预想的来执行, 所以只能用hint 来告诉服务器按照什么顺序连接各个表了.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 574,030
精华内容 229,612
关键字:

mysql执行顺序

mysql 订阅