SQL文のチューニング

この記事では、SQL文のチューニングに使用する様々な機能について解説します。

Oracleオプディマイザ

OracleはSQLを実行する前に実行計画と呼ばれるSQLの実行手順を作成します。実行計画を作成するOracleの内部コンポーネントが「オプティマイザ」です。

実行計画

実行計画とは「SQLを実行する手順」です。クライアントアプリケーションからOracleにSQLが発行されると、オプティマイザが実行計画を作成し、その実行計画に基づいてSQLを実行します。

実行計画の実行順序

実行計画を構成する複数の処理ステップがどの順序で実行されるかは以下のルールに従って読むことで理解できます。

  1. 下位の階層のステップが先に実行される
  2. 同じ階層のステップが複数ある場合、上に記載されたステップが先に実行される
  3. 上位の階層のステップは、下位の階層のステップの処理結果を入力とする

オペレーション

実行計画のそれぞれの処理ステップで実行される処理の内容をオペレーションと呼びます。

オペレーションはオブジェクトからデータを取得するアクセスパス(アクセス方法)と、取得したデータ同士を結合する結合方法に大別されます。

主要なオペレーション(アクセスパス):

オペレーション説明
TABLE ACCESS FULL表内のデータを読み出す
TABLE ACCESS BY INDEX ROWID索引から得たROWIDを元に表の1つのデータを読み出す
INDEX UNIQUE SCAN一意の索引から単一のROWIDを取得する
INDEX RANGE SCAN索引から1つ以上のROWIDを取得する
VIEWビューにアクセスする
SORT ORDER BYORDER BY句によるソート処理を実行する
SORT UNIQUEUNIQUE句によるソート処理を実行する
SORT GROUP BYGROUP BY句によるソート処理を実行する

主要なオペレーション(結合方法):

オペレーション説明
NESTED LOOPSネステッドループ結合で2つの表を結合する
NESTED LOOPS OUTERネステッドループ結合で2つの表を外部結合する
HASH JOINハッシュ結合で2つの表を結合する
HASH JOIN OUTERハッシュ結合で2つの表を外部結合する
MERGE JOINソートマージ結合で2つの表を結合する
MERGE JOIN OUTERソートマージ結合で2つの表を外部結合する

新規報告

閉じる