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

explain | 索引优化的这把绝世好剑,你真的会用吗?

但是常用的其实就是下面几个: 类型 含义 SIMPLE 简单SELECT查询,不包含查询和UNION PRIMARY 复杂查询的最外层查询,表示主要的查询 SUBQUERY SELECT或WHERE...列表包含了查询 DERIVED FROM列表包含的查询,即衍生 UNION UNION关键字之后的查询 UNION RESULT 从UNION后的表获取结果集 下面看看这些SELECT类型具体是怎么出现的...DERIVED 执行sql如下: 结果: 最后一条记录就是衍生表,它一般是FROM列表包含的查询,这里是sql的分组查询。...在这种情况下,您可以通过检查该WHERE 子句以检查它是否引用了某些适合索引的列,从而提高查询性能。 key列 该列表示实际用到的索引。...where条件过滤。

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

SQL谓词的概述(一)

谓词可以如下使用: SELECT语句的WHERE子句或HAVING子句中确定哪些行与特定查询相关。 注意,不是所有谓词都可以HAVING子句中使用。...EXISTS (subquery) - 使用查询测试指定表是否存在一行或多行。 BETWEEN x AND y - BETWEEN条件同时使用>=和<=比较条件。...,itemn]),IN (subquery) - 一个等式条件,它将字段值与逗号分隔列表的任何项或查询返回的任何项匹配。...可以左括号放置NOT一元操作符,以反转一组谓词的含义。 括号前后、括号与逻辑运算符之间不需要空格。 IN和%INLIST谓词功能上相当于多个OR相等谓词。...不能使用OR逻辑操作符将引用表字段的集合谓词与引用另一个表的字段的谓词关联起来。

1.2K20

SQL命令 UNION

但是,某些情况下,这种UNION/OR转换会带来很大的开销负担。%NOUNIONOROPT查询优化选项为与FROM子句关联的WHERE子句中的所有条件禁用此自动UNION/OR转换。...因此,复杂查询,可以对一个查询禁用自动UNION/OR优化,而在其他查询中允许它。 如果将包含查询条件应用于UNION,则该条件将在每个UNION操作数内应用,而不是末尾应用。...这允许每个UNION操作数应用查询优化。有关子查询优化选项的说明,请参阅FROM子句。...在下面的示例WHERE子句条件应用于联合的每个子查询,而不是联合的结果: SELECT Name,Age FROM (SELECT Name,Age FROM Sample.Person...要应用此优化,外部查询必须是一个“onerow”查询,没有WHERE或GROUP BY子句,它不能引用%VID,并且UNION ALL必须是其FROM子句中的唯一流。

1.5K20

SQL查询数据库(一)

使用SELECT语句为封闭的SELECT查询提供单个数据项的查询嵌入式SQL,这是一个使用SQL游标通过FETCH语句访问多行数据的SELECT语句。...SELECT的子句按以下顺序处理: FROM子句-指定一个表,一个视图,多个表或使用JOIN语法的视图或一个查询WHERE子句-限制使用各种条件选择的数据。...SQL,JOIN是一种操作,它将来自两个表的数据合并以产生第三个表,但要遵守限制性条件。结果表的每一行都必须满足限制条件。...外部联接通过各种条件表达式谓词和逻辑运算符支持ON子句。对NATURAL外部联接和带有USING子句的外部联接有部分支持。如果查询包含联接,则该查询的所有字段引用都必须具有附加的表别名。...该类查询可以引用在同一类或在同一命名空间中的另一类定义的数据。编译包含查询的类时,查询引用的表,字段和其他数据实体必须存在。编译包含查询的类时,不会编译该类查询

2.3K20

Oracle处理IN的几种方式

(2) 将IN后面的常量集合存储中间表,将原SQL的IN改写成和这个中间表做表连接,替代IN-List Expansion。 3....首先,第一种处理IN跟着查询的方式是IN-List Filter,他的意思是将查询的结果集作为过滤条件,并且执行FILTER类型的执行计划。...如下这条SQL,他的执行计划,就是FILTER,按照上述步骤,驱动结果集是employees的所有记录,过滤条件就是查询的结果集,employees过滤不满足条件的记录, SQL> select...之所以SQL可能会做查询展开,因为如果原SQL不做查询展开,通常情况下该查询会在执行计划的最后一步才执行,并且使用FILTER类型的执行计划,(3)我们介绍过。...Oracle查询where条件如果是如下这些条件之一,SQL满足一定条件后就可以做查询展开, (1) SINGLE-ROW(=、、=、) (2) EXISTS (3) NOT

1.7K30

mysql explain ref列_MySQL EXPLAIN详解

如果查询有任何复杂的查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUlT) table 访问引用哪个表(引用某个查询,如“derived3”) type 数据访问/...subquery,也就是位于select列表查询 derived 派生表——该临时表是从子查询派生出来的,位于form查询 union 位于union第二个及其以后的查询被标记为union...union 顾名思义,首先需要满足UNION的条件,及UNION第二个以及后面的SELECT语句,同时该语句依赖外部的查询 subquery 查询第一个SELECT语句 dependent subquery...eq_ref 最多只返回一条符合条件的记录。使用唯一性索引或主键查找时会发生 (高效) const 当确定最多只会有一行匹配的时候,MySQL优化器会在查询读取它而且只读取一次,因此非常快。...in subquery, dependent on outer query(查询的第一个select,取决于外面的查询) DERIVED None Derived table(派生表) DEPENDENT

3.3K60

SQLServer CTE 递归查询

第二个查询被称为递归查询成员:该查询调用CTE名称,触发递归查询,实际上是递归查询调用递归查询。   逻辑上可以将CTE名称的内部应用理解为一个查询的结果集。...在产品环境,慎用maxrecursion 查询提示,推荐通过 where 条件限制递归的次数。...; step4:第N次执行递归查询时,CTE名称是指Set(N-1),递归查询引用一个递归查询的结果集; Step5:如果递归查询返回空数据行,或超出递归次数的最大限制,停止递归;...step2:迭代公式是 union all 下面的查询语句。查询语句中调用cte,而查询语句就是cte的组成部分,即 “自己调用自己”,这就是递归的真谛所在。...3,查询路径,层次结构查询节点到父节点的path WITH cte AS (SELECT UserID, ManagerID, name, CAST(name AS NVARCHAR(MAX

1.5K20

Oracle里的查询转换

Oracle里的查询转换,有称为查询改写,指oracle执行目标sql时可能会做等价改写,目的是为了更高效的执行目标sql10g及其以后的版本,oracle会对某些类型的查询转换(比如查询展开、...指优化器不在将查询当做一个独立的单元来处理,而是将该查询转为它自身和外部查询之间的等价的表连接,将查询拆开, 将查询的表、视图从子查询拿出来,然后后外部查询的表、视图做连接,或者会把该查询转换为一个内嵌视图...(inline view)然后再和外部查询的表、视图做连接(查询展开) Oracle查询where条件是以下 single-row(=,>,=,) exists not exists...deptno in (10,20,30); 也还是走的INLIST ITERATOR 3 inlist filter   ---优化器把in后面的查询所对应的结果集当做过滤条件,并且走filter执行计划...目标sql的in后面子查询不是常量的集合 Oracle未对目标sql进行查询展开 4对in查询展开/视图合并 In 后面不实常量 In后面的查询可以展开

1.8K20

优化查询性能(三)

查询模块按字母顺序命名。查询命名每个命名子查询之前跳过一个或多个字母。...查询总是FALSE:少数情况下,InterSystems IRIS可以准备查询时确定查询条件总是FALSE,因此不能返回数据。“显示计划”会在“查询计划”组件通知这种情况。...如果查询包含具有这些条件之一的查询,则查询计划的查询模块表示“Subquery result NULL, found no rows”。...当一个长查询在后台运行时,会显示一个View process按钮。单击查看进程将在新选项卡打开进程详细信息页面。“进程详细信息”页,可以查看进程,还可以挂起、继续或终止进程。...假设从缓存查询导出到文本文件的查询包含完全限定的表引用;如果文本文件的表引用不是完全限定的,则QOPlanner实用程序使用在运行QOPlanner时系统上定义的系统范围的默认模式。

1.2K20

SQL开源替代品,诞生了!

' order by amount desc ) 后来,SQL 也发现了不分步会很麻烦,就提供了 CTE 语法,可以用 with 关键字,可以把前面步骤查询结果命名后在后面的步骤中使用: with...但 SQL 的无序集合机制不提供直接用位置访问成员的机制,必须人为造出一个序号字段,再用条件查询方法将其选出,导致必须采用查询才能完成。...这时就必须从源集合中使用分组得到的条件再次查询查询又不可避免地出现。...缺乏对象引用 SQL ,数据表之间的引用关系依靠同值外键来维系,无法将外键指向的记录直接用作本记录的属性,查询时需要借助多表连接或查询才能完成,不仅书写繁琐而且运算效率低下。...where gender='female')) 如果员工表的部门字段是指向部门表的记录,而部门表的经理字段是指向员工表的记录,那么这个查询条件只要简单地写成这种直观高效的形式: where gender

19110

MySQLMariaDB表表达式(3):视图「建议收藏」

/MariaDB中视图定义语句中的select部分,from后面不能是查询。...如果在某种条件下,视图的定义语句from字句正好需要的是查询,可以将这个子查询先定义成视图,再将视图放在from字句中。 更新视图时,实际上是转到对应的基表上进行更新。...由于是merge算法的视图,引用视图(此处是查询操作)的时候,会将视图中的各项替换为基表t的各项。包括: "*"号替换为vf1和vf2,它们又替换为t表的id和name。...因此,select * from my_view;执行的时候,会转换为下面的查询语句: select id,name from t where age<24; 如果查询my_view的时候,使用下面的语句...列表中有查询 没有基表,因为可能引用的是纯值,例如create view va as select 2。

1.1K20

关于查询转换的一些简单分析(三) (r3笔记第69天)

关于查询转换,已经讨论了视图合并和查询解嵌套,还有谓词推进和物化视图查询重写也是查询转换不可或缺的部分。 -->谓词推进 这个术语听起来高大上,有点故弄玄虚的味道。...其实在我们的查询已经潜移默化的使用到了。 比如下面的这个查询。...我们定义了一个查询 v,然后在外部的过滤条件中加入了过滤条件e.deptno=10 因为e.deptno=v.deptno 所以过滤条件也可以理解为v.depetno=10 select e.ename...SAL">1000) 从上面的执行计划可以看到执行计划第2,3,4行是查询v 相关的,第4行的过滤条件,直接在查询嵌入了过滤条件depetno=10。 这种情况就是使用了谓词推进。...可以根据查询条件来定义物化视图,开启查询重写的功能。 创建一个物化视图。

569110

关于查询转换的一些简单分析(一) (r3笔记第37天)

sql解析器,在生成执行计划的时候,会在多个执行计划中选择最优的计划,在这个过程查询转换就是一个很重要的过程。 虽然最终的执行结果没有变化,但是从优化器的角度来看,查询转换的结果会更好。...视图合并 查询解嵌套 谓词推进 物化视图查询重写 比如 select *from emp where deptno in (select deptno from dept) 会在查询转换中转换为下面的样子...SAL">1000) --查询解嵌套 查询嵌套和视图合并的不同之处在于视图合并是select xxx from的部分,而查询嵌套式where xxxx的部分。...会在查询走索引,然后通过exists子句来和外部查询的deptno字段连接。...SAL">"AVG(INNER.SAL)") 这个例子中子查询转换为了一个内嵌式图,然后与外部的查询合并连接,相关列成为了连接条件查询的剩余部分成为了内嵌视图。

53050

全网最全 | MySQL EXPLAIN 完全解读

select_type 查询类型,有如下几种取值: 查询类型 作用 SIMPLE 简单查询(未使用UNION或查询) PRIMARY 最外层的查询 UNION UNION的第二个和随后的SELECT...DEPENDENT UNION UNION的第二个或后面的查询,依赖了外面的查询 UNION RESULT UNION的结果 SUBQUERY 查询的第一个 SELECT DEPENDENT SUBQUERY...查询的第一个 SELECT,依赖了外面的查询 DERIVED 用来表示包含在FROM子句的查询的SELECT,MySQL会递归执行并将结果放到一个临时表。...这将删除查询并将其表放入最顶层的查询计划,从而改进查询的开销。通过合并半连接和反联接,优化器可以更加自由地对执行计划的表重新排序,某些情况下,可让查询提速。...>(query fragment) 使用查询实现 9 materialized-subquery.col_name 在内部物化临时表对col_name的引用,以保存查询的结果 10 <primary_index_lookup

1.4K20

MySQL

,会影响索引失效,导致查询速度降低 select * from employees where Salary > 90000/12; 4.3 where 条件子句 4.3.1 逻辑运算符 作用:检索数据符合条件的值...select ... -- 从哪几个表查 from 表 xxx join 连接的表 on 交叉条件 -- 假设存在一种多张表查询,慢慢来,先查询两张表,再慢慢增加 -- from a left join...subject where subjectname = '高等数学-2' ) ) -- 练习 -- 查询C语言-1 5名同学的成绩的信息(学号,姓名,分数) -- 使用查询 select...where st.stu_no = sr.stu_no order by r.stu_result desc limit 0,5 4.6.3 扩展exists用法 注意学习这种子查询的思维; 查询的语句可以使用外层查询的字段进行条件查询...; -- 查询员工表,所有管理者的信息 -- 查询写法:使用 in 查询,先确定所有的管理者(manager_id中都是管理者),注意去重 select e.employee_id '编号',e.last_name

87920

还不会看MySQL的EXPLAIN执行计划?这篇文章能帮到你

我们进行SQL优化的时候,主要是看where面的字段有没有用到索引。如何看这个查询有没有用到索引,那就看Explain执行计划了。...我们查询语句加上Explain,即可获取该语句的执行计划。 EXPLAIN SELECT * from member; 运行结果 详解 下面我将解释每个字段的含义。...SIMPLE:简单的查询,不包含查询和union explain select * from emp; PRIMARY:查询若包含任何复杂的查询,最外层查询则被标记为PRIMARY EXPLAIN...emp where deptno = 10 union select * from emp where sal >2000; SUBQUERY:SELECT或者WHERE列表包含查询 explain...EXPLAIN SELECT id from member WHERE CODE in (99, 100); using where:使用where进行条件过滤。 见上面的例子。

28510

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

什么是执行计划 根据表、列、索引和WHERE子句中的条件的详细信息,MySQL优化器考虑了许多技术来有效地执行SQL查询涉及的查找。...「关联/相关子查询」:查询的执行依赖于外部查询。多数情况下是查询WHERE 子句中引用了外部查询包含的列。 ❞ id SELECT查询的系列号,可以为NULL。...比如在上面的key_len的例子,ref的值是const,表示与user_name作等值匹配的对象是一个常数。...Using index:当我们的查询列表以及搜索条件只包含属于某个索引的列,也就是可以 使用索引覆盖的情况下, Extra 列将会提示该额外信息。..., Extra 列中会显示Using where;当使用索引访问来执行对某个表的查询,并且该语句的 WHERE 子句中有除了该索引包含的列之外的其他搜索条件时, Extra 列也会显示Using

70320
领券