Разница между планом объяснения и планом выполнения
Может ли кто-нибудь объяснить мне, в чем разница между планом выполнения и планом объяснения.
Когда я выполняю
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 |
--------------------------------------------------------------------------------------
Я получаю тот же результат, так в чем разница между ними.
Ответы
Ответ 1
explain plan
- это оператор, который используется для отображения плана выполнения.
Два образца, которые вы показали, просто отформатированы по-разному, что все.
Вы не сообщили нам, как именно вы создали эти выходы и какой инструмент вы использовали.
Но если не ошибаюсь, один из них является результатом autotrace
внутри SQL * Plus, другой - выходом при использовании процедур пакета dbms_xplan
.
Ответ 2
План объяснения - это то, что, по мнению оптимизатора, произойдет, когда вы запустите, план выполнения на самом деле произошел, когда вы запустили запрос.
См. ссылку здесь.
http://tkyte.blogspot.co.uk/2007/04/when-explanation-doesn-sound-quite.html