< SQL*Plus のデフォルトエディタ | 実行計画を調べる(SQLServer編) >

September 26, 2003

実行計画を調べる(Oracle編)

Oracleの場合はPLAN_TABLEをあらかじめ作っておく必要があります。

C:\>cd %ORACLE_HOME%\rdbmsxx\admin
C:\...\admin>sqlplus sys/oracle@mylisner

SQL*Plus: Release 9.2.0.1.0 - Production on 金 Sep 26 11:14:17 2003

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL>@utlxplan.sql
.
.
SQL>GRANT SELECT ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT INSERT ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT UPDATE ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT DELETE ON SYS.PLAN_TABLE TO PUBLIC;
SQL>CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE;
SQL>
実際に実行計画を取得するのは以下のようにします。
/* 実行計画をPLAN_TABLEに取得します */
TRUNCATE PLAN_TABLE;
EXPLAIN PLAN SET STATEMENT_ID='PLANTEST' FOR		-- コマンドの構文(文頭部)
	SELECT e.empno, e.ename, d.dname FROM scott.emp e, scott.dept d WHERE e.deptno=d.deptno;	-- ターゲットSQL文

/* テーブルの中身を整形して表示します。 */
SELECT DECODE(id,0,'', LPAD(' ',3*(level-1))||level||'.'||position)||' '||operation||' '||options||' '||object_name||' '||
       object_type||' '||DECODE(id,0,'Cost = '||position) QUERY
  FROM plan_table CONNECT BY PRIOR id = parent_id AND statement_id = 'PLANTEST'
  START WITH id = 0 AND statement_id = 'PLANTEST';

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/52

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?