実行計画の取り方
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]]