OracleでSQLクエリがインデックスを使用しているかどうかを確認する方法
Oracleでは、SQLがインデックスを使用しているかどうかを以下のようにして確認できます
- SQL トレースの使用:SQL トレースを有効にすると、使用インデックスや実行プランなどの情報を含む SQL ステートメントの実行プロセスを追跡できます。SQL トレースを有効にするには、次のステートメントを使用できます。
ALTER SESSION SET SQL_TRACE = TRUE;
トレースファイルを確認することでSQL Traceの出力結果を分析できます。
- 自動ワークロードリポジトリ(AWR)を使用する。AWRはSQL文の実行計画やインデックスの利用状況など、データベースのパフォーマンス情報を記録して格納します。SQL文の実行計画を表示するには、次の文を使用できます。
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<sql_id>'));
実行計画を見ることで、SQL文でインデックスが使用されているか確認できる。
- SQL最適化ヒントを使用して:SQL最適化ヒントを使用して、最適化が特定の実行計画を選択するよう指示できます。これには、特定のインデックスを使用または無効にすることも含まれます。インデックスの使用を強制するには、次のヒントをSQLステートメントで使用します。
/*+ INDEX(table_name index_name) */
SQL文にそのヒントが使われている場合には、指定されたインデックスが実際に利用されていることが確認できます。
- 動的パフォーマンス・ビュー(Dynamic Performance Views、DPV)を使用する:Oracleはデータベースの実行ステータスや統計情報を問い合わせるためのDPVを数多く提供しており、索引の使用状況も含まれています。SQL文の実行計画や索引の使用状況を問い合わせるためのDPVを以下に示します。
SELECT * FROM V$SQL_PLAN;
SELECT * FROM V$SQL_PLAN_STATISTICS;
SELECT * FROM V$SQLSTATS;
DPVの結果から、SQL文でインデックスを使用しているかどうかがわかります。