14

谁能解释一下执行计划和解释计划之间的区别。

当我执行

 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 |
--------------------------------------------------------------------------------------

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

4

3 回答 3

13

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

请参阅此处的链接。

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

于 2012-05-13T15:21:23.143 回答
9

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

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

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

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

于 2012-05-13T14:53:00.257 回答
0

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

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

资料来源:Pro Oracle SQL

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

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

于 2020-07-17T12:38:14.600 回答