小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Oracle 11g XEでSQLの実行計画を取得してみる

はじめに

Oracle Database Express Edition 11g(XE)でSQLの実行計画を取得する方法について、まとめてみました。

新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)
小田 圭二 大塚 信男 五十嵐 建平 谷 敦雄 宮崎 博之 神田 達成 村方 仁
翔泳社
売り上げランキング: 170,135

事前準備

実行計画を参照するには、PLAN_TABLEというテーブルを事前に作成する必要があります。以下のスクリプトを実行することで、PLAN_TABLEを作成することができます。

conn sys/oracle as sysdba
@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\utlxplan.sql
実行計画を取得したいSQLを解析する

実行計画を取得したいSQLを実行する前に、explain plan forという文を指定します。これにより、SQLの解析が行われます。

explain plan for
select * from table01;
>解析されました。
解析結果(実行計画)を参照する

解析結果を参照するには、以下のスクリプトを実行します。

@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\utlxplp.sql

スクリプトを実行すると、以下のような結果が得られます。以下の例ではテーブルフルアクセスが行われていることが分かります。

PLAN_TABLE_OUTPUT

                                                                                                                                                        • -

Plan hash value: 2567418043

                                                                                                                                                        • -
Id Operation Name Rows Bytes Cost (%CPU) Time
                                                                                                                                                        • -
0 SELECT STATEMENT 1 15 2 (0) 00:00:01
1 TABLE ACCESS FULL TABLE01 1 15 2 (0) 00:00:01
                                                                                                                                                        • -

8行が選択されました。

おわりに

explain plan forでSQLの実行計画を出力すると、どのような検索が行われたかを調べることができます。
テスト段階で性能問題になる前に実装段階からこまめにチェックするようにしていきたいですね。