而SQL语句的执行 计划则决定了SQL语句将会采用何种方式从数据库提取数据并返回给客户端,本文描述的将是如何通过EXPLAIN PLAN 获取SQL语句执行计划来获 取SQL语句的执行计划。...一、获取SQL语句执行计划的方式 1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 2....使用Toad工具来获取执行计划 下面主要讨论使用explain plan获取执行计划的方法 二、explain plan工作实质、前提及操作方法 1....工作实质 将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交 可以对select,insert,update...plan并不执行当前的SQL语句,而是根据数据字典中记录的统计信息获取最佳的执行计划并加载到表plan_table。
文章目录 示例 解释 一条select语句在MySQL中的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...identifier(每个select子句的标识id) select_type The SELECT type(select语句的类型) table The table for the output...:用于where中的in查询,完全替换子查询,效率更高。...语句为value IN (SELECT primary_key FROM single_table WHERE some_expr) index_subquery:子查询中的返回结果字段组合是一个索引(...:对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句在MySQL中的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为
好了,今天我们就一起来聊聊select语句是如何在MySQL中执行的。文章的主要内容如下。 ?...接下来,我们就以这条SQL语句为例,说说select语句是如何在MySQL中执行的。...登录MySQL后,客户端就会与MySQL建立连接,此时执行select语句时,首先会到查询缓存中查询是否执行过当前select语句。...如果之前执行过相应的select语句,则执行过的select语句和查询结果会以key-value的形式存放在查询缓存中,其中,key是查询语句,value是查询的结果数据。...如果开启了慢查询的话,执行select语句时,会在慢查询日志中输出一个rows_examined字段,这个字段表示select语句在执行的过程中扫描了数据表中的多少行数据。
而SQL语句的执行 计划则决定了SQL语句将会采用何种方式从数据库提取数据并返回给客户端,本文描述的将是如何通过EXPLAIN PLAN 获取SQL语句执行计划来获 取SQL语句的执行计划。...一、获取SQL语句执行计划的方式 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 查询动态性能视图vsql_plan,vsql_plan_statistics...,v 查询自动工作量资料库(Automatic Workload Repository)或查询Statspack,即从资料库中获取执行计划 启用执行计划跟踪功能,即autotrace功能 使用PL/SQL...工作实质 将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交 可以对select,insert,update,merge,delete...使用方法: explain plan for select * from scott.emp where ename='SCOTT'; --未设置标记位 explain
启用AUTOTRACE后,SQL*Plus会自动收集执行过的SQL语句的执行计划、性能统计数据等,并在语句执行结束后显示在SQL*Plus中。...在发生INSERT、DELETE、UPDATE和SELECT FOR UPDATE的时候,数据库缓冲区中的数据库块的个数。在SELECT语句中一般为0。...2、EXPLAIN PLAN FOR方式 SQL> EXPLAIN PLAN FOR SELECT * FROM T017_LHRO; SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY...ON EXPLAIN包含SQL语句的执行结果、SQL语句执行结果的数量和执行计划无有有无无无SET AUTOTRACE ON STATISTICS包含SQL语句的执行结果、SQL语句执行结果的数量和统计信息内容有有有无无无...PLAN命令,对于SELECT语句不会执行,只显示目标SQL的执行计划,但是对于DML语句还是会执行的,而且显示SQL语句执行结果的数量和执行计划否无有有无无无SET AUTOTRACE TRACEONLY
对其执行explain plan for, PLAN_TABLE_OUTPUT -------------------------------------------------------------...对其执行explain plan for, PLAN_TABLE_OUTPUT -------------------------------------------------------------...这条语句执行explain plan for,发现谓词条件变为如下(顺序变了): PLAN_TABLE_OUTPUT ------------------------------------------...data) = 22; ID ---------- 1234 执行explain plan for, PLAN_TABLE_OUTPUT ------------------...不同版本RBO和CBO的使用,以及对执行SQL的影响。 2. explain plan for观察查询语句谓词顺序的变化。 3. 10053查看执行计划的成本选择。
♣ 题目部分 在Oracle中,如何得到真实的执行计划?...♣ 答案部分 在Oracle数据库中判断得到的执行计划是否准确,就是看目标SQL是否被真正执行过,真正执行过的SQL所对应的执行计划就是准确的,反之则有可能不准,因此,通过10046事件及如下的几种方式得到的执行计划是最准确的...TABLE(DBMS_XPLAN.DISPLAY_AWR('sql_id')); 这里需要注意的是,虽然SQL*Plus的AUTOTRACE功能有部分是真实执行了SQL语句的(例如所有DML语句),...那么,为什么EXPLAIN PLAN命令里显示的预估执行计划与该SQL真实的执行计划不一样呢?...④ 统计信息收集参数:Explain Plan始终是用最新的统计信息产生执行计划,但是,Runtime Plan不一定会用最新的统计信息。因此也会产生执行计划差异。
♣ 答案部分 在Oracle数据库中,用户发给Oracle让其执行的目标SQL和Oracle实际执行的SQL有可能是不同的,这是因为Oracle可能会对执行的目标SQL做等价改写,即查询转换。...关于上表中的内容需要注意以下几点: ① 子查询展开通常都会提高原SQL的执行效率,因为如果原SQL不做子查询展开,那么通常情况下该子查询就会在其执行计划的最后一步才被执行,并且会走FILTER类型的执行计划...,这也就意味着对于外部查询所在结果集的每一条记录,该子查询就会被执行多少次,这种执行方式的执行效率通常情况不会太高,尤其在子查询中包含两个或两个以上表连接时,此时做子查询展开后的执行效率往往会比走FILTER...--- -- TRUE:仅调用EXPLAIN PLAN命令解析语句 --- -- FALSE:执行语句后从缓存获得执行计划 ---...plan for '||stmt; for xpl_rec in ( select * from table(dbms_xplan.display(null,null,format)) ) loop
在之前的一篇文章中,我曾经介绍过如何借助 ClickHouse 的服务日志查看 SQL 执行计划,从而变相达到 EXPLAIN 查询的目的。...在先前的方法中,由于 CH 没有原生的 EXPLAIN 查询,所以如果想要看到执行计划,那么 SQL 语句必须被真正的执行,所以这种方法只能作为一种事后分析,有着明显的缺点。 现在,事情有了转机。...PLAN PLAN是最常用的功能,即查看 SQL 执行计划,例如执行: EXPLAIN PLAN SELECT 1: Union Expression (Projection) Expression...PLAN 是 EXPLAIN 的默认值,所以 PLAN 修饰词可以省略,现在我们换条复杂一点的 SQL,执行: EXPLAIN SELECT database, table,...EXPLAIN PLAN 目前还可以设置 3 个参数,它们分别是: header,打印计划中各个步骤的 head 说明,默认关闭; description,打印计划中各个步骤的描述,默认开启; actions
state描述的是语句执行中的某一个状态。...3.3 explain分析执行计划 通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序...查询SQL语句的执行计划 : explain select * from tb_item where id = 1; explain select * from tb_item where title...之 id id 字段是 select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。...或 WHERE 列表中包含了子查询 DERIVED 在FROM 列表中包含的子查询,被标记为 DERIVED(衍生) MYSQL会递归执行这些子查询,把结果放在临时表中 UNION 若第二个SELECT
使用SQL Profile的两个目的:①锁定或者说是稳定执行计划。②在不能修改应用中的SQL的情况下使SQL语句按指定的执行计划运行。...SQL Profile最大的优点是在不修改SQL语句和会话执行环境的情况下去优化SQL的执行效率,适合无法在应用程序中修改SQL时。...查看SQL默认执行计划,走了索引,通过指定Outline可以获取到系统为我们生成的hint LHR@dlhr> explain plan for select * from TB_LHR_20160525...如果我们想让它走全表扫描,首先获取全表扫描HINT LHR@dlhr> explain plan for select /*+ full(TB_LHR_20160525) */* from TB_LHR...查看是否生效,已经生效了: LHR@dlhr> explain plan for select * from TB_LHR_20160525 where object_id= :a; Explained
state描述的是语句执行中的某一个状态。...3.3 explain分析执行计划 通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT...查询SQL语句的执行计划 : explain select * from tb_item where id = 1; ?...字段 含义 id select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。...3.3.3 explain 之 select_type 表示 SELECT 的类型,常见的取值,如下表所示: select_type 含义 SIMPLE 简单的select查询,查询中不包含子查询或者
AUTOTRACE使用方法 AUTOTRACE具体使用方法方法如下: 1.要使用AUTOTRACE命令,也需要首先创建执行计划表PLAN_TABLE(一般数据库中默认已经建好)。...SQL> set autotrace traceonly explain SQL> select * from dual; Execution Plan ----------------------...SQL的数量;执行SQL语句时生成的内部SQL语句,称为递归调用。...10 sorts (disk) 至少需要写入一次磁盘的排序操作数 11 rows processed 操作中处理的行数 注意点 当指定参数TRACEONLY时: SQL语句会真正执行; 不会显示执行结果...; 只会显示统计信息和执行计划 当指定参数TRACEONLY EXPLAIN时: SQL语句不会真正执行; 不会显示执行结果; 只会显示执行计划,不会显示统计信息。
然后使用如下的语句尝试生成执行计划。...SQL> explain plan for merge into (select * from test_bug where object_type='TABLE') t using (select...explain plan for merge into (select * from test_bug ) t using (select :1 object_id,:2 object_name...explain plan for merge into test_bug t using (select :1 object_id,:2 object_name,:3 object_type...而对于merge语句的更多反思,如下: 1.我所从事的一些调优工作中,对于merge的优化很难下手,因为这虽然是一个语句,但是有多重执行路径,执行计划没法确定,使用调优工具优化也给不出建议。
因此,在PG里:前5次执行预备语句,每一次都产生新的执行计划,叫做custom plan;第6次再执行时,会生成一个不依赖于参数的执行计划并保存下来,叫做generic plan。...之后每执行一个预备语句,也都会产生一个相对应的custom plan。...custom plan是指对于preapre语句,在执行execute的时候,把execute语句中的参数嵌套到语句之后生成的计划。...generic plan是指对于preapre语句生成计划,该计划策略会在执行execute语句的时候把参数bind到plan中,然后执行计划。...但是explain查询当前缓存的执行计划,在实际中估算的成本可能是不准确的,因为很可能估算的成本和实际运行的成本不一致。
; rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN -----------------...限制看下之前的EXPLAIN语句是否会使用这样的索引: rjuju=# EXPLAIN SELECT * FROM hypo WHERE id = 1;...该插件还提供了隐藏和恢复某个索引的功能: 1)先用hypopg_reset()清除其他索引之前的影响:SELECT hypopg_reset(); 2)创建2个虚拟索引,并执行EXPLAIN rjuju...# EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN -----------------------------------------------...请注意,隐藏现有索引的功能仅适用于当前会话中的 EXPLAIN 命令,不会影响其他会话。
本文主要描述DBMS_XPLAN包中display函数的使用,尽管可以通过SQL语句来查询缺省表plan_table来获得执行计划, 事实上,使用display函数更便捷,且display函数提供了多种不同的显示格式...有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述 有关由SQL语句来获取执行计划请参考: 使用 EXPLAIN PLAN 获取SQL语句执行计划 ...(演示版本Oracle 10g R2) 1、使用EXPLAIN PLAN加载预估的执行计划 SQL> EXPLAIN PLAN SET STATEMENT_ID='TSH'...3、当所有参数为null的情况下,显示执行计划表中(缺省为plan_table)最后一条语句的执行计划 4、尽管可以通过SQL语句查询plan_table来获取执行计划,建议直接使用display...函数,这足够说明一切问题 5、当SQL语句中使用了绑定变量时,由explain plan获得的执行计划是不可靠的
SQL EXPLAIN命令可用于生成XML格式的查询计划,还可以选择生成备选查询计划和SQL统计信息。所有生成的查询计划和统计信息都包含在名为Plan的单个结果集字段中。...执行计划:语句文本和查询计划 显示计划执行计划由两个组件组成,即语句文本和查询计划: 语句文本复制了原始查询,但进行了以下修改:管理门户SQL界面中的显示计划按钮显示删除了注释和换行符的SQL语句。...“Read master map”作为主模块中的第一个项目符号表示查询计划效率低下。查询计划使用以下映射类型语句之一开始执行Read master map......在这些情况下,Show Plan不显示语句文本,而Query Plan[没有为该语句创建的计划]。这通常发生在分隔文字的引号不平衡时。...从例程导出SQL查询时,例程代码中SQL语句之前的任何#import行也将位于导出文件中的SQL文本之前。
EXPLAIN and Show Plan有两种方式显示SQL查询的查询计划; 如果需要,两者都可以显示备用的查询计划。EXPLAIN:前言用解释命令选择SELECT查询。...例如:SQL]USER>>EXPLAIN SELECT Name FROM Sample.MyTable WHERE Name='Fred Rogers'SHOW PLAN:发出查询,然后发出show...EXPLAIN只能用于返回选择查询的查询计划;它不会返回用于执行查询操作的Insert,Update或DELETE语句等其他命令的查询计划。...这包括生成和编译语句所花费的时间。 它包括在语句缓存中查找语句所花费的时间。 因此,如果执行了一条语句,然后按编号或名称回收,回收语句的准备时间接近于零。...RUN加载脚本文件,然后准备并执行文件中包含的每个语句。 脚本文件中的语句必须分隔,通常用GO行或分号(;)分隔。 RUN命令提示指定分隔符。
2.2 如何查看执行计划 (1)、explain plan命令 按F5,PL/SQL Developer就调用explain plan命令,F5只是explain plan命令上的一层封装而已。...语法: explain plan for + 目标SQL select * from table(dbms_xplan.display) 执行explain plan命令,则Oracle就将解析目标SQL...(4)、10046事件 和explain plan、dbms_xplan和autotrace开关不同之处:所得到的的执行计划中明确显示了目标SQL实际执行计划中每一个执行步骤所消耗的逻辑读、物理读和花费的时间...当使用SET AUTOTRACE TRACEONLY EXPLAIN时,如果执行的是SELECT语句,则并没有被实际执行,如果执行的是DML语句,会被Oracle实际执行。...使用SET AUTOTRACE ON、SET AUTOTRACE TRACEONLY和SET AUTOTRACE TRACEONLY EXPLAIN来获得DML语句的执行计划时要小心,因为这些DML语句实际已经被执行过了
领取专属 10元无门槛券
手把手带您无忧上云