Подтвердить что ты не робот

Разница между планом объяснения и планом выполнения

Может ли кто-нибудь объяснить мне, в чем разница между планом выполнения и планом объяснения.

Когда я выполняю

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

Я получаю тот же результат, так в чем разница между ними.

4b9b3361

Ответ 1

explain plan - это оператор, который используется для отображения плана выполнения.

Два образца, которые вы показали, просто отформатированы по-разному, что все.

Вы не сообщили нам, как именно вы создали эти выходы и какой инструмент вы использовали.

Но если не ошибаюсь, один из них является результатом autotrace внутри SQL * Plus, другой - выходом при использовании процедур пакета dbms_xplan.

Ответ 2

План объяснения - это то, что, по мнению оптимизатора, произойдет, когда вы запустите, план выполнения на самом деле произошел, когда вы запустили запрос.

См. ссылку здесь.

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