アクセスパスの種類

アクセスパスとはテーブル・インデックスへのアクセスするための方法で SQL パフォーマンスチューニングを理解する基本であり、以下のような種類がある。

アクセスパス内容
オペレーションオプション
インデックスUNIQUE SCAN索引からの ROWID の取出し(1つ)
RANGE SCAN、
〜 DESCENDING
索引から昇順(降順)探索 による ROWID の取り出し
(範囲探索:1つ以上)
FULL SCAN、
〜 DESCENDING
索引からすべてのROWID の昇順(降順)取り出し
FAST FULL SCANINDEX FULL SCAN 高速版。パラレル、マルチブロック読み込みにより速いがソートはされていない
テーブルFULL表のすべての行への順次アクセス
BY ROWID RANGEROWID 範囲による表アクセス
BY USER ROWIDユーザー指定 ROWID を使用して表にアクセス
BY INDEX ROWID非パーティション表における索引の ROWID 経由の表アクセス
BY GLOBAL INDEX ROWIDパーティション表におけるグローバル索引の ROWID 経由の表アクセス
BY LOCAL INDEX ROWIDパーティション表におけるローカル索引の ROWID 経由の表アクセス
CLUSTER索引クラスタを使用して表にアクセス
HASHハッシュ・クラスタを使用して表にアクセス
SAMPLEテーブルのランダムサンプリングによるアクセス
SAMPLE BY ROWID RANGEROWID 範囲指定したサンプリングによるアクセス

インデックス・スキャン

  • インデックス・ユニーク・スキャン
例) colmn_name = search_value 
  • インデックス・レンジ・スキャン
例) BETWEEN a AND b, like 'a%', < , > など ~

参考: B-Tree インデックス

  • インデックス・スキップ・スキャン
例) [[INDEX SKIP SCAN]]~
  • インデックス・フル・スキャン
  • 高速・フル・インデックス・スキャン (CBO のみ)
例) インデックス化されたカラムのみで構成されている。
(パラレル・マルチブロック読み込み対応)

もしインデックス化したカラムだけを参照(条件を含む)している SQL の場合
インデックスのデータにアクセスするだけで処理を完了することができるためテーブルにアクセスしない。

テーブル・フル・スキャン

テーブルフルスキャンとは、テーブル全体をバッファ内に読み込むアクセス方法。(オペレーション名:TABLE ACCESS FULL) テーブルの読み込みはデータの有無や格納されたレコード数に関係なく ハイウォータマーク まで行なわれる。

以下の場合にテーブルフルスキャンになる。

  • インデックスが使用できない
  • 大文字小文字を区別しない検索 (NLS_COMP,NLS_SORT 初期化パラメータ)
  • CBO によりインデックススキャンよりテーブルフルスキャンが効率的と判断

ROWID スキャン

ROWID を指定したアクセス方法。
ROWID は同一テーブル内でユニークであり、単一行(※) を取得する場合には最速のアクセス方法。

(※) 複数行をアクセスする場合にはインデックススキャンによるアクセスパスの方がより高速になる場合がある。

クラスタ・アクセス

指定したキー(クラスタ・キー)と同じ値をもつレコード群をインデックス・クラスタから 取り出し、個々に ROWID 経由で読み込むアクセス方法。

ハッシュ・アクセス

事前にハッシュ・クラスタ・キーのハッシュ値によって分散配置されたハッシュ・クラスタから 同じハッシュ値をもつデータブロックを割り出し、直接取り出して読み込むアクセス方法。

サンプル表スキャン

SELECT の SAMPLE 句指定時のアクセス方法。
(注意) SAMPLE 句を使用するとヒント句は無効になる。

テーブル・データをランダムサンプリングする



アクセスパス 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー