ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

EXPLAIN PLAN FOR 〜 でSQLの実行計画を出力

EXPLAIN PLAN で解析してから DBMS_XPLAN.DISPLAY で出力する。

SQL> EXPLAIN PLAN FOR
  2> SELECT /*+ USE_CONCAT */ * FROM TEST_TABLE
  3> WHERE ELE1 = :B1
  4> OR ELE2 = :B2;

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ALL'));

-------------------------------------------------------------------------------
| Id  | Operation                    |  Name          | Rows  | Bytes | Cost  |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                |     2 |    72 |     8 |
|   1 |  CONCATENATION               |                |       |       |       |
|   2 |   TABLE ACCESS BY INDEX ROWID| TEST_TABLE     |     1 |    36 |     4 |
|*  3 |    INDEX RANGE SCAN          | TEST_TABLE_I2  |     1 |       |     3 |
|*  4 |   TABLE ACCESS BY INDEX ROWID| TEST_TABLE     |     1 |    36 |     4 |
|*  5 |    INDEX RANGE SCAN          | TEST_TABLE_I1  |     1 |       |     3 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("TEST_TABLE"."ELE2"=:Z)
   4 - filter(LNNVL("TEST_TABLE"."ELE2"=:Z))
   5 - access("TEST_TABLE"."ELE1"=:Z)

SQLトレースと違って sqlplus だけで完結するので便利。
AUTOTRACE でも同じものが出せるけど、↑の方法は SQL を実行しない。