任何人都可以解释一下执行计划和解释计划之间的区别。
执行时
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 |
--------------------------------------------------------------------------------------
我得到相同的输出,所以两者之间有什么区别。
答案 0 :(得分:11)
解释计划是优化程序在运行时认为会发生的,执行计划实际上是在您运行查询时发生的。
请参阅此处的链接。
http://tkyte.blogspot.co.uk/2007/04/when-explanation-doesn-sound-quite.html
答案 1 :(得分:9)
explain plan
是用于显示执行计划的语句。
您展示的两个样本的格式不同,就是全部。
您没有告诉我们您是如何生成这些输出的,也不是告诉我们您使用的是哪种工具。
但是如果没有弄错的话,其中一个是SQL * Plus中autotrace
的输出,另一个是使用dbms_xplan
包的过程时的输出。
答案 2 :(得分: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
根据当前情况(例如可用内存,统计信息),差异可能会很大。