実行計画の操作の内容一覧

パフォーマンスチューニングマニュアルや tkprof などの実行計画の読み方に記載されているものは誤字と記載漏れらしきものがそこそこあった。
マニュアルに記載されている以外にもステートメント自体のオペレーター、メモリ内ソートや WINDOW 操作など多くのオペレーターとオプションがあり、ネット上で調べた範囲では 合計で 約 200 以上ある。

パフォーマンスチューニングマニュアルに記載されている一覧+独自補足

結合処理に関する実行計画

操作オプション操作の内容ver. (※1)
NESTED LOOPネステッド・ループ結合 を使用した結合処理8.0 以前
OUTERネストしたループを使用した 外部結合 処理
MERGE JOIN2つの行セットそれぞれを特定の項目でソートして結合した結果を戻す(ソートは別のオペレーターで出てくる) ⇒ ソート・マージ結合8.0 以前
OUTERマージ結合による外部結合
ANTIマージ結合によるアンチ結合(逆結合)
SEMIマージ結合によるセミ結合(半結合)
CARTESIANマージ結合による CARTESIAN=デカルト積(直積)Oracle 9i Release2 (※1)
HASH JOINハッシュによる 2 つの行セットの結合8.0 以前
ANTIハッシュによるアンチ結合(逆結合)
SEMIハッシュによるセミ結合(半結合)
RIGHT ANTIハッシュによる右側アンチ結合Oracle 10g
RIGHT SEMIハッシュによる右側セミ結合
OUTERハッシュによる(左側)外部結合
RIGHT OUTERハッシュによる右側外部結合
CUBE SCANINNER JOIN によるキューブ・アクセスOracle 11g
PARTIAL OUTERINNER JOIN と OUTER JOIN が混成したキューブ・アクセス
OUTEROUTER JOIN によるキューブ・アクセス

インデックス処理に関する実行計画

操作オプション操作の内容ver. (※1)
BITMAPCONVERSIONTO ROWIDS : Bitmap 索引 のビットマップ表現を ROWID に変換する8.0 以前
FROM ROWIDS : ROWID をビットマップ表現に変換する
COUNT : ROWID の数を戻す。テーブル内の値を必要としない場合に有効(有用)
INDEXSINGLE VALUE : あるキー値のビットマップを取得する
RANGE SCAN : ある範囲のキー値のビットマップを取得する
FULL SCAN : 索引のフル・スキャンを行なう
MERGE複数のビットマップを1つにマージする
MINUS2つのビットマップのビット減算する
ORビットマップの OR 演算
ANDビットマップ AND 演算Oracle 9i Release2 (※1)
KEY ITERATION「表」から行を取り出し索引から対応するビットマップを検索する(この処理の後には BITMAP MERGE 操作が続くことが常のようである)
DOMAIN INDEXドメイン・インデックスから ROWID を取得する8.1
INDEXUNIQUE SCANB-Tree 索引 からユニークキーを使用して1つの ROWID を取得する8.0 以前
RANGE SCAN索引から範囲(スタート・キー、ストップ・キー)をキーにして1または複数 ROWID の取得
RANGE SCAN DESCENDINGINDEX RANGE SCAN を索引値の降順にスキャン
FULL SCAN索引からのすべての ROWID の取得Oracle 9i Release2 (※1)
FULL SCAN DESCENDINGINDEX FULL SCAN を索引の降順で行なう
FAST FULL SCANINDEX FULL SCAN の高速版:マルチブロック読み込みを使用するため取得順番は不定。インデックスに全カラムが含まれている場合 TABLE FULL SCAN と同じ意味になる(※ つまり ROWID だけでなくカラム値も取得する)Oracle 9i Release2 (※1)
CBO のみ
SKIP SCANINDEX SKIP SCAN を使用した ROWID の取得

テーブルアクセス/マテリアライズド・ビューアクセスに関する実行計画

操作オプション操作の内容ver. (※1)
TABLE ACCESSFULL表のすべての行を取得する8.0 以前
CLUSTER「索引クラスタのキーの値」を使用して表から行を取得する
HASH「ハッシュ・クラスタのキーの値」を使用して表からの行を取得する
BY ROWIDROWID を使用して表からの行を取得する
Oracle 9iR2 から消滅
BY USER ROWIDROWID を使用して表からの行を取得する(ROWID を条件に指定した場合)8.1
BY INDEX ROWID索引を使用して行を取得する(索引はパーティション化していないもの)
BY GLOBAL INDEX ROWIDグローバル索引のみを使用して行を取得する
BY LOCAL INDEX ROWIDローカル索引と0個以上のグローバル索引を使用して行を取得する
SAMPLE表から行のサンプル採取(テーブル・データをランダムサンプリングするOracle 9i Release2 (※1)
BY ROWID RANGEROWID 範囲を使用して表からの行を取得する
SAMPLE BY ROWID RANGEROWID 範囲を使用した表から行のサンプル採取
MAT_VIEW ACCESSFULLTABLE ACCESS "FULL" のマテリアライズドビュー版Oracle 10g
CLUSTER同 CLUSTER オプション操作
HASH同 HASH 操作
BY USER ROWID同 BY USER ROWID オプション操作
BY INDEX ROWID同 BY INDEX ROWID オプション操作
BY GLOBAL INDEX ROWID同 BY GLOBAL INDEX ROWID オプション操作
BY LOCAL INDEX ROWID同 BY LOCAL INDEX ROWID オプション操作
SAMPLE同 SAMPLE オプション操作
BY ROWID RANGE同 BY ROWID RANGE オプション操作
SAMPLE BY ROWID RANGE同 SAMPLE BY ROWID RANGE オプション操作
MAT_VIEW REWRITE ACCESSFULL
...
etc
TABLE ACCESS "FULL" のマテリアライズドビュー・リライト版
おそらく MAT_VIEW ACCESS と同じオプション群があると思われる。
Oracle 10g
VIEWビュー の問合せを実行して行を取得する8.0 以前

行の操作に関する実行計画、その他

操作オプション操作の内容ver. (※1)
AND-EQUAL複数の ROWID のセットを受け取り重複をなくし共通する ROWID を戻す8.0 以前
CONNECT BYCONNECT BY 問合せにおいて階層順に行を取得する8.0 以前
CONCATENATION複数の行のセットの UNION ALL を行なう ⇒ UNION8.0 以前
COUNT選択された行数をカウントする8.0 以前
STOPKEYWHERE における ROWNUM 条件によって戻す行数を制限したカウント処理
FILTER行のセットから条件に合致するものだけを取得する8.0 以前
FIRST ROW問合せ結果の最初の行のみを取得する8.0 以前
FOR UPDATEFOR UPDATE 句 による行ロック処理8.0 以前
HASHGROUP BYハッシュ化することで行のセットをグループ化する
HASH JOIN とは別物
Oracle 10g Release2
HASHUNIQUEハッシュ化することで行のセットの重複をなくす処理
※ ドキュメントに無し Oracle 11g R1 現在
INLIST ITERATORIN リスト条件 のそれぞれの値に対して後続操作を反復する8.0 以前
CONNECT BYCONNECT BY 問合せにおいて階層順に行を取得する8.0 以前
REMOTEリモート・データベースからデータを取得する8.0 以前
SEQUENCE順序値 のアクセスをともなう処理8.0 以前
SORTAGGREGATE選択した行セットにグループ化し、集約された行セットにグループ関数を適用した結果の取得(結果は単一行になる)8.0 以前
UNIQUE行セットをソートし重複をなくす
GROUP BYGROUP BY 句によるもの。行セットのグループ化するのための前処理としてのソート ⇒ HASH GROUP BY Oracle 10g Release2
JOINマージ結合の前処理のソート操作
ORDER BYORDER BY 句による行セットのソート
UNION2つの行セットの和集合から重複をなくして取得する
UNION ALL 処理 ⇒ CONCATENATION
8.0 以前

パーティション処理に関する実行計画

操作オプション操作の内容ver. (※1)
PARTITIONPARTITION_START 列 および PARTITION_STOP 列によって指定された範囲のパーティションに対して後続操作を反復する8.0 以前
SINGLE1つのパーティションへのアクセス8.1
ITERATOR複数のパーティションへのアクセス
ALL全パーティションへのアクセス
INLISTIN リストを元にしたパーティションへのイテレータ
INVALIDアクセスするパーティションセットが空

パラレル処理に関する実行計画

操作オプション操作の内容ver. (※1)
PX ITERATORBLOCK(Parallel eXecution iterator) パラレル・スレーブ・セット間でのブロックまたはチャンク範囲へのオブジェクトの分割Oracle 10g
CHUNK
PX COORDINATORパラレル実行のコーディネーター(Query Coordinator)Oracle 10g
PX PARTITIONパラレル実行向けの PARTITION 操作Oracle 10g
PX RECEIVEPX SEND ノードから送られるパーティション化されたデータを読み取るレシーバー(以前は DISTRIBUTION 列に表示されていたもの)Oracle 10g
PX SENDQC (RANDOM)パラレル・セット間における配分方法の実装。ランダム、ハッシュ、レンジによるパーティション化(以前は DISTRIBUTION 列に表示されていたもの)Oracle 10g
HASH
RANGE

集合演算に関する実行計画

操作オプション操作の内容ver. (※1)
MINUS2つの行セットにおいて最初のセットにあって2番目のセットにない行を取得し、かつ、重複をなくす処理8.0 以前
INTERSECTION2つの行セットから重複をなくし共通部分を戻す8.0 以前
UNION-ALL2つの行セットを和を戻す(重複した行の削除は行なわない)8.0 以前

(※1) マニュアルに記載されはじめたドキュメントのバージョンを記載している。そのため Oracle 9i R2 と書いてあっても Oracle 9i R1 や、それ以前から実装されている機能がいくつかある。つまり記載されたバージョンからの機能とは限らない。



実行計画の収集

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)