日々常々

ふつうのプログラマがあたりまえにしたいこと。

実行計画の取り方

SQL*Plusで実行計画をとるには、単純にautotraceをonにする。

set autotrace on

これ以降実行したSQLは、SQLの結果と実行計画と統計情報が出る。
でも実行計画をとるときって、結果は要らない事が多い。その時はonの代わりに traceonly またはその省略形の trace をつける。

set autotrace traceonly
set autotrace trace

これで実行計画と統計情報だけが帰ってくる。
統計情報要らなくて実行計画がほしい場合はexplainかexpをつける。

set autotrace on explain
set autotrace on exp

もちろんこのときに実行結果を表示しないようにも出来る。

set autotrace trace exp

止めたいときはoffで。普通に実行結果が返ってくるようになります。

set autotrace off

一応、実行結果を表示しないようにしても、SQLは実行されていることに注意。表示しなくしたところで、短縮されるのは結果の描写部分です。DMLも実行されちゃうわけです。一応試してみた。

SQL> select count(*) from test_table1;

  COUNT(*)
----------
         5

SQL> set autotrace trace exp
SQL> insert into test_table1 values(1,'aaa','bbb','');

1行が作成されました。


実行計画
----------------------------------------------------------

-------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | INSERT STATEMENT |      |     1 |    20 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------

SQL> /

1行が作成されました。


実行計画
----------------------------------------------------------

-------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------
|   0 | INSERT STATEMENT |      |     1 |    20 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------

SQL> set autotrace off
SQL> select count(*) from test_table1;

  COUNT(*)
----------
         7

SQL>


あと、書き方を忘れた場合はset autotraceだけ実行すると教えてくれる。

SQL> set autotrace
使用方法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]