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

同じ出力が得られるので、2つの違いは何ですか。

4

3 に答える 3

13

Explainプランは、オプティマイザーが実行時に発生すると考えるものであり、実行プランは、クエリの実行時に実際に発生します。

こちらのリンクをご覧ください。

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

于 2012-05-13T15:21:23.143 に答える
9

explain plan実行プランを表示するために使用されるステートメントです。

表示した2つのサンプルは、フォーマットが異なるだけです。それだけです。

これらの出力をどの程度正確に生成したか、どのツールを使用していたかは教えてくれませんでした。

ただし、誤解しない限り、そのうちの1つはautotrace内部SQL * Plusの出力であり、もう1つは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 に答える