OracleデータベースでSQLチューニングを行う際、実行計画(Execution Plan)の確認は欠かせません。実行計画を見れば、テーブルアクセスの種類や結合方法、インデックスの利用状況などが明らかになり、パフォーマンス改善のヒントを得られます。
Oracleでは主にEXPLAIN PLANとAUTOTRACEという2つの手段を使って実行計画を確認できます。それぞれの使い方と違いを解説します。
EXPLAIN PLANの使い方
EXPLAIN PLANは、SQLの実行前にその構文を解析し、Oracle Optimizerがどのような処理計画を立てているかを確認する手段です。
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;
次に、PLAN_TABLEから内容を確認します。
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
出力には、アクセスパス(FULL TABLE SCAN、INDEX RANGE SCANなど)やコスト情報が表示されます。
AUTOTRACEの使い方
SQL*PlusやSQL Developer
など一部のツールでは、AUTOTRACEを使ってSQLの実行と同時に実行計画と統計情報(論理読み取り・物理読み取りなど)を確認できます。
SQL*Plusでは以下のように有効化します:
SET AUTOTRACE ON;
例:
SELECT * FROM employees WHERE department_id = 10;
この実行で、クエリ結果とともに実行計画およびバッファ読み取りの統計情報が表示されます。
なお、SET AUTOTRACE TRACEONLY
とすれば、クエリ結果を表示せず実行計画だけを表示できます。
EXPLAIN PLANとAUTOTRACEの違い
項目 | EXPLAIN PLAN | AUTOTRACE |
---|---|---|
SQLの実行 | 行わない | 実行される |
実行計画の精度 | 統計情報が反映されない場合がある | 実際の実行に基づくため正確 |
統計情報(バッファ読み取り等) | 取得不可 | 取得可能 |
使用ツール | SQL*Plus、SQL Developer、他 | SQL*Plus、SQL Developerなど |
実行計画の見方
実行計画の各ステップには、次のような内容が表示されます:
- Operation:アクセス方法(TABLE ACCESS FULL、INDEX RANGE SCANなど)
- Object Name:対象の表やインデックス名
- Cost:Oracleが推定したコスト(小さいほど高速)
インデックスが適切に利用されているか、ネステッドループやハッシュ結合が妥当かなどを判断する材料になります。
まとめ
SQLのパフォーマンスを改善するためには、実行計画の把握が不可欠です。
EXPLAIN PLANは「実行前に予測される処理」、AUTOTRACEは「実行後に実際に行われた処理と統計」を確認する方法です。両方を使い分けて、より効果的にチューニングを行いましょう。