首页
学习
活动
专区
圈层
工具
发布

数据库优化方案之SQL脚本优化

,所以id字段为null F:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery G:dependent subquery:与dependent union...类似,表示这个subquery的查询要受到外部表查询的影响 H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select 3)、table 显示的查询表名...G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...,可以使用索引将子查询去重。...如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num

1.8K30

「Mysql优化大师三」查询执行计划explain详解,含案例

到目前位置这些都非常直接了当,但这三类语句的混合则会使输出变得非常复杂,之后就会看到。 select_type 主要用来分辨查询的类型,是普通查询还是联合查询还是子查询。...用来从UNION的匿名临时表检索结果的SELECT被标记为UNION RESULT SUBQUERY 子查询的select,不再from子句中 DEPENDENT SUBQUERY The index...explain select * from emp where sal > (select avg(sal) from emp) ; --dependent subquery:subquery的子查询要受到外部表查询的影响...job from t_job); --unique_subquery:该连接类型类似与index_subquery,使用的是唯一索引 explain select * from emp e where...join buffer:使用连接缓存,情况没有模拟出来 --impossible where:where语句的结果总是false explain select * from emp where empno

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【MySQL系列】- MySQL执行计划一览

    「关联/相关子查询」:子查询的执行依赖于外部查询。多数情况下是子查询的 WHERE 子句中引用了外部查询包含的列。 ❞ id SELECT查询的系列号,可以为NULL。...MATERIALIZED:当查询优化器在执行包含子查询的语句时,选择将子查询物化之后与外层查询进行连接查询时,该子查询对应的 select_type 属性就是 MATERIALIZED。...第二条记录的 table 列的值是subquery2>,说明该表 其实就是 id 为 2 对应的子查询执行之后产生的物化表,然后将 s1 和该物化表进行连接查询 UNCACHEABLE SUBQUERY...IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS 子查询,而且子查询可以使用到主键进行等值匹配的话,那么该子查询执行计划 的 type 列的值就是 unique_subquery...) OR user1.id = 1; index_subquery :index_subquery 与 unique_subquery 类似,只不过访问⼦查询中的表时使⽤的是普通的索引。

    1.1K20

    Mysql-explain 关键字

    字段 含义 id 是一组数字,代表多个表之间的查询顺序,或者包含子句查询语句中的顺序,id 总共分为三种情况,依次详解1、id 相同,执行顺序由上至下2、id 不同,如果是子查询,id 号会递增,id...2、primary:主查询,如果 SQL 语句中包含任何子查询,那么子查询的最外层会被标记为 primary3、subquery:在 select 或者 where 里包含了子查询,那么子查询就会被标记为...,性能由好到差的连接类型为:system —> const —>eq_ref —> ref —>ref_or_null—> index_merge—> index_subquery —>range—>...index—> all 1、system:表中只有一行记录,system 是 const 的特例,几乎不会出现这种情况,可以忽略不计2、const:将主键索引或者唯一索引放到 where 条件中查询,MySQL...常见于主键或唯一索引扫描4、ref:不是主键索引,也不是唯一索引,就是普通的索引,可能会返回多个符合条件的行5、range:体现在对某个索引进行区间范围检索,一般出现在 where 条件中的 between

    35410

    MySQL数据库:explain执行计划详解

    explain select * from (select * from t3 where id=3952602) a ; (4)subquery:除了from子句中包含的子查询外,其他地方出现的子查询都可能是...union 或union all语句中,但是这个查询要受到外部查询的影响; (8)dependent subquery:与dependent union类似,子查询中的第一个SELECT,这个subquery...(8)unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值; (9)index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...,可以使用索引将子查询去重。...第二:(id = 3):【select id, name from t1 where address = ‘11’】:因为是在from语句中包含的子查询所以被标记为DERIVED(衍生),where address

    2.4K20

    mysql优化概述

    query_cache_size : 使用查询缓冲,MySQL将查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。...unique_subquery: 类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询...,而且子查询可以使用到主键进行等值匹配的话,那么该子查询执行计划的type列的值就是unique_subquery。...index_subquery: index_subquery与unique_subquery类似,只不过访问子查询中的表时使用的是普通的索引 range: 如果使用索引获取某些范围区间的记录,那么就可能使用到...Using where : 使用全表扫描来执行对某个表的查询,并且该语句的WHERE子句中有针对该表的搜索条件 Using filesort: 排序操作无法使用到索引,只能在内存中(记录较少的时候)或者磁盘中

    65110

    mysql索引及优化

    subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery dependent subquery:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响...derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select。...ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。 unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值。...index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。...MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。

    1K20

    mysql explain ref列_MySQL EXPLAIN详解

    EXPLAIN Output Columns 列名 说明 id 执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。...select_type 表示查询的类型 类型 说明 simple 简单子查询,不包含子查询和union primary 包含union或者子查询,最外层的部分标记为primary subquery 一般子查询中的子查询被标记为...,N指向子查询,也就是explain结果中的下一列 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id 注意:MySQL对待这些表和普通表一样...注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。...(see UNCACHEABLE SUBQUERY)(在union中排位第二甚至更靠后属于不能缓存的子查询) table 显示这行的数据是关于哪张表的,也可能是表的别名。

    4.9K60

    MySQL 子查询

    2.优势 使用子查询的主要优势有: 它们允许结构化查询,以便可以隔离语句的每个部分。 它们提供了需要复杂连接和并集的操作的替代方法。 许多人发现子查询比复杂的连接或联合更具可读性。...事实上,正是子查询的创新让人们产生了将早期 SQL 称为“结构化查询语言”的最初想法。 3.分类 根据子查询的结果可以将其分为多种类型。...标量子查询(Scalar Subquery):返回单个值(一行一列)的子查询。 行子查询(Row Subquery):返回单行结果(一行多列)的子查询。...当 WHERE 条件中的子查询返回多行数据时,不能再使用普通的比较运算符,因为它们不支持单个值和多个值的比较;如果想要判断某个字段是否在子查询返回的数据列表中,可以将子查询与 IN、ALL、ANY/SOME...@did := a.dept_id将当前行的部门 ID (a.dept_id) 赋值给用户变量 @did。该变量用在前面的 IF 语句中,用于给部门内的员工计算排名。

    2.1K10

    mysql优化概述

    (UNION ALL),针对该临时表的查询的select_type就是UNION RESULT SUBQUERY 子查询的第一个SELECT(被物化,只执行一次) DEPENDENT SUBQUERY...unique_subquery: 类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询...,而且子查询可以使用到主键进行等值匹配的话,那么该子查询执行计划的type列的值就是unique_subquery。...index_subquery: index_subquery与unique_subquery类似,只不过访问子查询中的表时使用的是普通的索引 range: 如果使用索引获取某些范围区间的记录,那么就可能使用到...Using where : 使用全表扫描来执行对某个表的查询,并且该语句的WHERE子句中有针对该表的搜索条件 Using filesort: 排序操作无法使用到索引,只能在内存中(记录较少的时候)或者磁盘中

    77520

    MySQL DQL 子查询

    2.优势 使用子查询的主要优势有: 它们允许结构化查询,以便可以隔离语句的每个部分。 它们提供了需要复杂连接和并集的操作的替代方法。 许多人发现子查询比复杂的连接或联合更具可读性。...事实上,正是子查询的创新让人们产生了将早期 SQL 称为“结构化查询语言”的最初想法。 3.分类 根据子查询的结果可以将其分为多种类型。...标量子查询(Scalar Subquery):返回单个值(一行一列)的子查询。 行子查询(Row Subquery):返回单行结果(一行多列)的子查询。...当 WHERE 条件中的子查询返回多行数据时,不能再使用普通的比较运算符,因为它们不支持单个值和多个值的比较;如果想要判断某个字段是否在子查询返回的数据列表中,可以将子查询与 IN、ALL、ANY/SOME...@did := a.dept_id将当前行的部门 ID (a.dept_id) 赋值给用户变量 @did。该变量用在前面的 IF 语句中,用于给部门内的员工计算排名。

    1.1K00

    MySQL优化之Explain命令解读

    union all语句中,因为它不需要参与查询,所以id字段为null F:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery G:dependent subquery...:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响 H:derived:from字句中出现的子查询。...:用于where中的in形式子查询,子查询返回不重复值唯一值 I:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。...即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。 D:using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。...J:firstmatch(tb_name):5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。如果内表的数据量比较大,就可能出现这个。

    1.1K30

    MySQL中explain的结果​字段介绍

    --+---------+------+------+----------+-------+ 1 row in set, warning (0.00 sec) 可以看到,我们插入一条数据,然后将表的存储引擎改为...unique_subquery 这个类型是指在一些包含in的子查询的查询语句中,如果子查询可以使用到主键进行等值匹配的话,那么该子查询的执行计划中的type列的值就是unique_subquery...,所以子查询中的查询方法就是unique_subquery。...index_subquery 这个和上面一样,但是in条件中的子查询使用的是a_key_var普通索引字段,而不是id字段: mysql:yeyztest 18:53:30>>explain select...idx_key_a的索引列,又是idx_key_d这个联合索引的索引列,所以当我们使用a_key_var作为where语句中的过滤条件时,possible_keys中的值就是这两个索引,而key的值是实际使用到的索引

    9.5K10

    Mysql 中令人稀里糊涂的Explain

    select_type中常用的类型有以下几种: SIMPLE : 查询语句中不包含UNION或者子查询的查询都算作是SIMPLE类型,注意: 连接查询也算SIMPLE类型。...MATERIALIZED : 当查询优化器在执行包含子查询的语句时,选择将子查询物化之后与外层查询进行连接查询时,该子查询对应的select_type属性就是MATERIALIZED 。...然后将s1和该物化表进行连接查询。...unique_subquery : 类似于两表连接中被驱动表的eq_ref访问方法,unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS...类似,只不过访问子查询中的表时使用的是普通的索引 这里针对的是子查询返回的列是唯一索引还是普通索引 range : 如果使用索引获取某些范围区间的记录,那么就可能使用到range访问方法 index

    61850

    sql优化40秒到0.1秒的奥秘

    是子查询的,id的序号将递增,id值越大的优先级越高,会更先被执行 explain select * from emp e where e.deptno in (select d.deptno from...e.deptno in (select d.deptno from dept d where d.dname = 'SALES'); select_type 主要用来分辨查询的类型,是普通查询还是联合查询还是子查询...MySQL会先执行主查询,再执行子查询。 SUBQUERY:表示查询中的第一个子查询,子查询包含在SELECT列表中的子查询或WHERE子句中的子查询。 DERIVED:表示查询中的子查询,派生表。...explain select * from emp e where e.deptno in (select distinct deptno from dept); --DERIVED: from子句中出现的子查询...job from t_job); --unique_subquery:该连接类型类似与index_subquery,使用的是唯一索引 explain select * from emp e where

    54820

    mysql慢查询日志

    ,比如where in subquery: 除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery dependent subquery: 与dependent union类似,...表示这个subquery的查询要受到外部表查询的影响 derived: from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select materialization: 物化子查询通过将子查询结果作为一个临时表来加快查询执行速度...ref_or_null: 与ref方法类似,只是增加了null值的比较,实际用的不多 unique_subquery: 用于where中的in形式子查询,子查询返回不重复唯一值 index_subquery...: 用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可能使用索引将子查询去重 range: 索引范围扫描,常见于使用>,的查询中...,常见于where字句含有in()类型的子查询,如果内表的数据量比较大的,就可能出现这个 loosescan(m..n): 5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时

    1.4K20

    性能优化-通过explain查询分析SQL的执行计划

    ,所以id字段为null F:subquery:除了from子句中包含的子查询外,其他地方出现的子查询都可能是subquery G:dependent subquery:与dependent union...类似,表示这个subquery的查询要受到外部表查询的影响 H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select 3)、table 显示的查询表名...G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...,可以使用索引将子查询去重。...extra列显示using index condition J:firstmatch(tb_name):5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。

    1.7K10

    手把手教你彻底理解MySQL的explain关键字

    值越大的越先执行,相同值的从上往下执行。 1.4 select_type select_type表示查询的类型,主要是为了区分普通查询、子查询、联合查询等复杂查询。...(3)DERIVED 在from子句中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中。...(4)SUBQUERY 在select或where子句中包含了子查询,该子查询被标记为SUBQUERY。 (5)UNION 若第二个select查询语句出现在UNION之后,则被标记为UNION。...(8)unique_subquery 该联接类型类似于index_subquery。子查询中的唯一索引。...出现了Using where,说明索引被用来执行查找。 (4)Using where 表示查询时有索引被用来进行where过滤。 (5)Using join buffer 查询时使用了连接缓存。

    2.5K20

    一文看懂如何分析MySQL Explain(13)

    MySQL将 select 查询分为简单查询(SIMPLE)和复杂查询(PRIMARY)。复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询。...:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery ⑧ derived :from字句中出现的子查询,也叫做派生表。...⑦ unique_subquery:unique_subquery是针对在一些包含IN子查询的查询语句中,如果查询优化器决定将IN子查询转换为EXISTS子查询,而且子查询可以使用到主键进行等值匹配的话...,那么该子查询执行计划的type列的值就是unique_subquery。...⑧index_subquery:index_subquery与unique_subquery类似,只不过访问子查询中的表时使用的是普通索引 接下文“一文看懂如何分析MySQL Explain(2/3)”

    1.6K40
    领券