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 パッケージに用意されている 表関数 を使用する。
直前の実行計画を整形して出力する。
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行が選択されました。
実行計画の関連事項