この記事では、SQL文のチューニングに使用する様々な機能について解説します。
Oracleオプディマイザ
OracleはSQLを実行する前に実行計画と呼ばれるSQLの実行手順を作成します。実行計画を作成するOracleの内部コンポーネントが「オプティマイザ」です。
実行計画
実行計画とは「SQLを実行する手順」です。クライアントアプリケーションからOracleにSQLが発行されると、オプティマイザが実行計画を作成し、その実行計画に基づいてSQLを実行します。
実行計画の実行順序
実行計画を構成する複数の処理ステップがどの順序で実行されるかは以下のルールに従って読むことで理解できます。
- 下位の階層のステップが先に実行される
- 同じ階層のステップが複数ある場合、上に記載されたステップが先に実行される
- 上位の階層のステップは、下位の階層のステップの処理結果を入力とする
オペレーション
実行計画のそれぞれの処理ステップで実行される処理の内容をオペレーションと呼びます。
オペレーションはオブジェクトからデータを取得するアクセスパス(アクセス方法)と、取得したデータ同士を結合する結合方法に大別されます。
主要なオペレーション(アクセスパス):
| オペレーション | 説明 |
| TABLE ACCESS FULL | 表内のデータを読み出す |
| TABLE ACCESS BY INDEX ROWID | 索引から得たROWIDを元に表の1つのデータを読み出す |
| INDEX UNIQUE SCAN | 一意の索引から単一のROWIDを取得する |
| INDEX RANGE SCAN | 索引から1つ以上のROWIDを取得する |
| VIEW | ビューにアクセスする |
| SORT ORDER BY | ORDER BY句によるソート処理を実行する |
| SORT UNIQUE | UNIQUE句によるソート処理を実行する |
| SORT GROUP BY | GROUP BY句によるソート処理を実行する |
主要なオペレーション(結合方法):
| オペレーション | 説明 |
| NESTED LOOPS | ネステッドループ結合で2つの表を結合する |
| NESTED LOOPS OUTER | ネステッドループ結合で2つの表を外部結合する |
| HASH JOIN | ハッシュ結合で2つの表を結合する |
| HASH JOIN OUTER | ハッシュ結合で2つの表を外部結合する |
| MERGE JOIN | ソートマージ結合で2つの表を結合する |
| MERGE JOIN OUTER | ソートマージ結合で2つの表を外部結合する |