EXPLAIN PLAN を使って実行計画を取得する

EXPLAIN PLAN の使い方

EXPLAIN PLAN 文は EXPLAIN PLAN FOR + SQL 文によってオラクルのオプティマイザが選択した「実行計画=(予定)」を取得することできる。
※ EXPLAIN PLAN 文による実行計画の取得は SQL の実際の実行が行なわれないため即座に終了する。 SQL の実行を伴わないため SQL 統計情報は取得できない。 参考: AUTOTRACE による実行計画の取得

例)

EXPLAIN PLAN FOR select * from hoge;

この文によって SQL の実行計画は PLAN_TABLE という表に格納される。 PLAN_TABLE 表を SQL を使用して直接見ても良いが、簡単な整形程度では見づらいためにお勧めしない。

実行計画の表示方法 その1

オラクルが用意しているスクリプトを使用する

実行計画の整形表示

SQL> @?/rdbms/admin/utlxpls.sql

Oracle 10g より以前であればファイルをコピーして plan.sql などとしてホームディレクトリに配置して使うのが便利

実行計画の表示方法 その2

DBMS_XPLAN パッケージに用意されている 表関数 を使用する。Oracle 10g

直前の実行計画を整形して出力する。

SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY())

Oralce 10g では utlxpls.sql の内容も DBMS_XPLAN パッケージを使用する形式に書き換えられている。

実行計画の表示方法 その2 改

表関数を VIEW に変換して DBMS_XPLAN のパラメータ入力を省略する。

CREATE VIEW PLAN AS 
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE',NULL,'SERIAL'));

と定義し、表関数を固定のビューにすることでより便利になる。

SQL> SELECT * FROM PLAN;
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
Plan hash value: 2883659879
------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |   100K|    95M| 10770   (1)| 00:01:54 |
|   1 |  TABLE ACCESS FULL| JOIN_BIG |   100K|    95M| 10770   (1)| 00:01:54 |
------------------------------------------------------------------------------
 
8行が選択されました。


実行計画の関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)