アクセスパスの種類
アクセスパスとはテーブル・インデックスへのアクセスするための方法で SQL パフォーマンスチューニングを理解する基本であり、以下のような種類がある。
アクセスパス | 内容 |
オペレーション | オプション |
インデックス | UNIQUE SCAN | 索引からの ROWID の取出し(1つ) |
RANGE SCAN、 〜 DESCENDING | 索引から昇順(降順)探索 による ROWID の取り出し (範囲探索:1つ以上) |
FULL SCAN、 〜 DESCENDING | 索引からすべてのROWID の昇順(降順)取り出し |
FAST FULL SCAN | INDEX FULL SCAN 高速版。パラレル、マルチブロック読み込みにより速いがソートはされていない |
テーブル | FULL | 表のすべての行への順次アクセス |
BY ROWID RANGE | ROWID 範囲による表アクセス |
BY USER ROWID | ユーザー指定 ROWID を使用して表にアクセス |
BY INDEX ROWID | 非パーティション表における索引の ROWID 経由の表アクセス |
BY GLOBAL INDEX ROWID | パーティション表におけるグローバル索引の ROWID 経由の表アクセス |
BY LOCAL INDEX ROWID | パーティション表におけるローカル索引の ROWID 経由の表アクセス |
CLUSTER | 索引クラスタを使用して表にアクセス |
HASH | ハッシュ・クラスタを使用して表にアクセス |
SAMPLE | テーブルのランダムサンプリングによるアクセス |
SAMPLE BY ROWID RANGE | ROWID 範囲指定したサンプリングによるアクセス |
インデックス・スキャン
例) colmn_name = search_value
例) BETWEEN a AND b, like 'a%', < , > など ~
参考: B-Tree インデックス
例) [[INDEX SKIP SCAN]]~
- インデックス・フル・スキャン
- 高速・フル・インデックス・スキャン (CBO のみ)
例) インデックス化されたカラムのみで構成されている。
(パラレル・マルチブロック読み込み対応)
もしインデックス化したカラムだけを参照(条件を含む)している SQL の場合
インデックスのデータにアクセスするだけで処理を完了することができるためテーブルにアクセスしない。
テーブル・フル・スキャン
テーブルフルスキャンとは、テーブル全体をバッファ内に読み込むアクセス方法。(オペレーション名:TABLE ACCESS FULL)
テーブルの読み込みはデータの有無や格納されたレコード数に関係なく ハイウォータマーク まで行なわれる。
以下の場合にテーブルフルスキャンになる。
ROWID スキャン
ROWID を指定したアクセス方法。
ROWID は同一テーブル内でユニークであり、単一行(※) を取得する場合には最速のアクセス方法。
(※) 複数行をアクセスする場合にはインデックススキャンによるアクセスパスの方がより高速になる場合がある。
クラスタ・アクセス
指定したキー(クラスタ・キー)と同じ値をもつレコード群をインデックス・クラスタから
取り出し、個々に ROWID 経由で読み込むアクセス方法。
ハッシュ・アクセス
事前にハッシュ・クラスタ・キーのハッシュ値によって分散配置されたハッシュ・クラスタから
同じハッシュ値をもつデータブロックを割り出し、直接取り出して読み込むアクセス方法。
サンプル表スキャン
SELECT の SAMPLE 句指定時のアクセス方法。
(注意) SAMPLE 句を使用するとヒント句は無効になる。
⇒ テーブル・データをランダムサンプリングする
アクセスパス 関連事項