【问题标题】:difference between explain plan and execution plan解释计划和执行计划的区别
【发布时间】:2012-05-21 07:19:25
【问题描述】:

谁能解释一下执行计划和解释计划有什么区别。

当我执行时

 set autotrace traceonly;
 select * from emp where empno=7369;

Execution Plan
----------------------------------------------------------
  0       SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=1 Card=1 Bytes=38)
  1    0    TABLE ACCESS BY INDEX ROWID SCOTT.EMP (Cost=1 Card=1 Bytes=38)
  2    1      INDEX UNIQUE SCAN SCOTT.PK_EMP (Cost=0 Card=1)


 Explain Plan

 explain plan for select * from emp where empno=7369;
 select * from table(dbms_xplan.display);

Plan hash value: 2949544139

--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    38 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

我得到相同的输出,那么两者有什么区别。

【问题讨论】:

    标签: oracle sql-execution-plan


    【解决方案1】:

    EXPLAIN PLAN 语句用于显示优化器为 SQL 语句选择的计划操作。 我要澄清的第一件事是,当您有 EXPLAIN PLAN 输出时,您就有了实际执行 SQL 语句时应该使用的估计执行计划

    SQL 语句的实际执行计划是在执行语句时产生的

    来源:Pro Oracle SQL

    http://rsmt.it.fmi.uni-sofia.bg/OracleDB/Pro%20Oracle%20SQL,%202nd%20Edition.pdf

    根据当前情况(例如可用内存、统计信息),差异可能很大。

    【讨论】:

      【解决方案2】:

      解释计划是优化器认为在你运行时会发生的事情,执行计划实际上是在你运行查询时发生的。

      在此处查看链接。

      http://tkyte.blogspot.co.uk/2007/04/when-explanation-doesn-sound-quite.html

      【讨论】:

        【解决方案3】:

        explain plan 是用于显示执行计划的语句。

        您展示的两个示例只是格式不同,仅此而已。

        您没有告诉我们您是如何准确生成这些输出的,也没有告诉我们您使用的是哪种工具。

        但如果没记错的话,其中一个是 SQL*Plus 中 autotrace 的输出,另一个是 dbms_xplan 包的程序使用时的输出。

        【讨论】:

        • :是的,我已经使用上面提到的方法来生成解释计划和执行计划。但是我不知道为什么人们有时会要求解释计划,有时会要求执行计划?
        • @GauravSoni:这只是措辞。当他们要求“执行计划”时,他们关注的是输出。当使用“解释计划”一词时,他们关注如何运行它(通常问题是“向我们展示解释计划的输出
        • @a_horse_with_no_name 你能解释一下我应该如何解释执行计划底部的表格吗?
        • @songo:我不明白你的问题。您是指上面写着“SELECT STATEMENT”的部分吗?
        • @a_horse_with_no_name 不,我的意思是整个表:) 我的理解是这个表是下面语句explain plan for select * from emp where empno=7369; 的执行计划。该表应该显示执行计划,但我没有得到表本身的内容。主要是 3 种操作及其成本。优化器会连续运行这 3 个操作吗?它会在operation 1operation 2 之间选择吗?
        猜你喜欢
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 2014-06-08
        • 2017-03-11
        • 2012-04-28
        • 1970-01-01
        • 2023-03-10
        • 2014-10-14
        相关资源
        最近更新 更多