GAGA LIFE.

DBAブログ

Oracle アクセスパス

概要

Oracleのアクセス・パスについてまとめた内容を記載します。
アクセス・パスは、データを取り出す方法のことです。

アクセス・パス一覧

分類 実行計画(Operation) 説明
Table TABLE ACCESS FULL 全表走査。HWM(High Water Mark)までの全てのブロックにアクセスし、全行を取り出す。
単一のI/O呼び出しで複数のブロックが要求される。単一のI/Oでの読込みブロック数は最大でdb_file_multiblock_read_countパラメータの値。
TABLE ACCESS BY BY ROWID RANGE 指定された範囲のROWIDを使用してテーブルから行を取得。
TABLE ACCESS BY USER ROWID (ROWID を条件に指定した場合)ROWID を使用して表からの行を取得する。
TABLE ACCESS BY INDEX ROWID 索引からのROWIDを使用して表から行を取り出す。※索引は非パーティション
TABLE ACCESS BY GLOBAL INDEX ROWID 非ローカル・パーティション索引からのROWIDを使用して表から行を取り出す。
TABLE ACCESS BY LOCAL INDEX ROWID ローカルにパーティション化された索引からのROWIDを使用して表から行を取り出す。
TABLE ACCESS BY INDEX ROWID BATCHED 索引から取得したROWIDを同じデータ・ブロックごとにまとめてアクセスする。
TABLE ACCESS CLUSTER インデックスクラスタキーに基づいてクラスタ化されたテーブルの行にアクセスする。
TABLE ACCESS HASH ハッシュされたクラスタキーに基づいてクラスタ化されたテーブルの行にアクセスする
TABLE ACCESS SAMPLE テーブル内のブロックのサンプルをスキャンする。
テーブルデータをランダムにサンプルスキャンする。
TABLE ACCESS SAMPLE BY ROWID RANGE 指定されたROWID範囲を使用して、テーブル内のブロックのサンプルのスキャンする。
TABLE ACCESS INMEMORY FULL (インメモリ―列ストアが有効になっている場合)メモリ上のテーブルを全表走査する。
Index INDEX FULL SCAN 索引から全ての ROWID取得。表データをフルスキャンするのではなく、ソート済みの索引をフルスキャンするため、ソート処理を回避できる。
INDEX FULL SCAN (MIN/MAX) インデックス内の最初または最後のエントリを返却する。
最小値または最大値に相当する値を発見したところでリーフのスキャンを停止する。
INDEX FULL SCAN DESCENDING 降順で全索引スキャンする。
INDEX RANGE SCAN リーフ・ブロックをスキャンして条件に該当する複数エントリを返却する。
索引が定義された列に対して範囲条件(BETWEEN,<,>)を指定した場合と非一意索引の場合の等価条件でも選択される。
索引には索引列がソートして格納されているため、索引を使用してORDER BY句を満たせる場合はソート処理を回避可能。
INDEX RANGE SCAN DESCENDING INDEX RANGE SCAN を索引値の降順にスキャンする。
INDEX RANGE SCAN (MIN/MAX) インデックス範囲の最初または最後のエントリを返します。
最小値または最大値に相当する値を発見したところでリーフのスキャンを停止する。
INDEX SKIP SCAN 複合索引の第1列目に対する条件指定がなく、2列目以降の列に対して条件があった場合に
複合索引を使用して条件に該当する行を選択するアクセス方法
INDEX SKIP SCAN DESCENDING INDEX SKIP SCAN を索引値の降順にスキャンする。
INDEX UNIQUE SCAN 条件に該当する1エントリを返す。主キーor一意索引の付いた列に対して等価条件を使用している場合のみ選択される可能性がある。
INDEX FAST FULL SCAN INDEX FULL SCANのマルチブロックリード版。索引ブロックを先頭エクステントから格納順にアクセスする方法のため、戻される結果は索引キーの順にソートされていない。
INDEX SAMPLE FAST FULL SCAN 行のサンプルに対してインデックス高速フルスキャンを実行する。
HASH JOIN(INDEX JOIN) 索引が結合されている表から必要な列のみが索引に存在する列である場合にのみ可能。
AND-EQUAL 複数の ROWID のセットを受け取り重複をなくし共通する ROWID を戻す。
BITMAP INDEX SINGLE VALUE 単一のキー値のビットマップ内の行を返す。
BITMAP INDEX RANGE SCAN 一連のキー値のビットマップ内の行を返す。
BITMAP INDEX FULL SCAN 可能なすべてのキー値のビットマップ内の行を返す。
BITMAP INDEX FAST FULL SCAN 可能なすべてのキー値のビットマップ内の行を返す。
BITMAP CONSTRUCTION ビットマップインデックスの作成時にビットマップを構築する。
BITMAP COMPACTION ビットマップインデックスの作成中にビットマップを圧縮する。
BITMAP CONVERSION FROM ROWIDS ROWIDのセットをビットマップのセットに変換する。
BITMAP CONVERSION TO ROWIDS ビットマップをキー値に変換し、ROWIDに変換する。
BITMAP AND WHERE句に複数の条件をANDで指定した場合、いくつかのビットマップ索引のビットマップ・エントリをマージする
BITMAP OR 複数の条件をORて指定した場合に実行される。
BITMAP MINUS 特定のビットマップからほかのビットマップで1が立っているビットを排除する処理
BITMAP MERGE BITMAP AND/OR/MINUSなどのオペレーションを実行する前に、RANGE SCANの結果得られた複数のビットマップをマージ
BITMAP CONVERSION COUNT 1つまたは複数のビットマップの行数のカウントを返します。
BITMAP KEY ITERATION ビットマップを反復処理します。スター・トランザクションで使用

参考資料

Expert Oracle SQL
Pro Oracle SQL, Second Edition
Troubleshooting Oracle Performance, Second Edition
Expert Oracle Indexing and Access Paths: Maximum Performance for Your Database
https://docs.oracle.com/cd/E82638_01/TGSQL/optimizer-access-paths.htm#GUID-00711237-35D3-4CFC-A234-59B3EC53DCD1
8 オプティマイザのアクセス・パス